簡體   English   中英

SQL Server 2008 R2-為什么我的臨時表認為它具有標識列?

[英]SQL Server 2008 R2 - why does my temp table think it has an identity column?

我正在嘗試創建一個存儲過程,該存儲過程將能夠限制使用部門ID返回的記錄數。 我試圖通過加入臨時表來限制記錄。

當我運行下面的代碼時,出現錯誤:

僅當使用列列表且IDENTITY_INSERT為ON時,才能為表'#department'中的identity列指定一個顯式值。

這是代碼:

DECLARE @departmentID INT
SET @departmentID = 4

-- create temp department table --
select top 0 * into #department from PayrollDepartment

-- load temp department table
IF @departmentID < 1 OR @departmentID IS NULL
BEGIN
    INSERT INTO #department SELECT * FROM PayrollDepartment
END 
ELSE
BEGIN
    INSERT INTO #department SELECT * FROM PayrollDepartment WHERE PayrollDepartmentID =     @departmentID
END

我開始於:

IF @departmentID < 1 OR @departmentID IS NULL
BEGIN
    SELECT * INTO #department FROM ApplicationEmployeeInfo..PayrollDepartment
END 
ELSE
BEGIN
    SELECT * INTO #department FROM ApplicationEmployeeInfo..PayrollDepartment WHERE PayrollDepartmentID = @departmentID
END

但是我得到了錯誤:

數據庫中已經有一個名為“ #department”的對象

我不是SQL專家,所以也許有更好的方法可以做到這一點?

臨時表具有一個標識列,因為SELECT .. INTO復制了具有標識列的原始表的表結構。

我建議顯式創建您的臨時表,並列出要從部門中選擇的列。 在生產代碼中使用SELECT *幾乎從來不是一個好主意 ,因此,我建議明確列出您的選擇並插入列中:

CREATE TABLE #Department
(   PayrollDepartmentID INT NOT NULL,
    <more columns>
);

IF @departmentID < 1 OR @departmentID IS NULL
    BEGIN
        INSERT #Department (PayrollDepartmentID, <more columns>)
        SELECT  PayrollDepartmentID, <more columns>
        FROM    PayrollDepartment;
    END
ELSE
    BEGIN
        INSERT #Department (PayrollDepartmentID, <more columns>)
        SELECT  PayrollDepartmentID, <more columns>
        FROM    PayrollDepartment
        WHERE   PayrollDepartmentID = @departmentID;
    END

看起來可能需要更多工作,而且肯定也很冗長,但是從長遠來看,它是更好的實踐和更強大的功能。 這也意味着您可以通過僅從PayrollDepartment獲取實際需要的列來避免冗余

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM