2009-11-30 93 views
3

今天早上我已經查看了很多次,並且找不到問題。它可能死了很簡單,當有人指出時我會覺得自己像個白癡。這個SQL失敗了什麼?我越來越試圖將列添加到臨時表中失敗

-- Get CurrentRowCount 
DECLARE @MaxID INT 

SELECT @MaxID = ISNULL(MAX(WorkTypeID),0) 
FROM caWorkType 

ALTER TABLE #WorkType ADD _RowID INT NOT NULL IDENTITY(@MaxID,1) 

錯誤是:「附近有語法錯誤@MaxID「」我已經確認並@MaxID正在由select語句設置爲45。臨時表#WorkType也沒有名爲「_RowID」的列

+0

模式:JIT-SQL,組成SQL語句在SQL變量,然後執行該語句。 – Don 2009-11-30 06:01:41

回答

2

這不是嘗試向失敗的臨時表添加列的操作,但不能使用變量指定IDENTITY的值:

NOT OK

ALTER TABLE #WorkType ADD _RowID INT NOT NULL IDENTITY(@MaxID,1) 

OK

ALTER TABLE #WorkType ADD _RowID INT NOT NULL IDENTITY(55,1) 

Marc

+0

好的!感謝一百萬,代碼是由一位大四給我的,我以爲我把它搞砸了。再次感謝。 – StevenMcD 2009-11-30 05:29:41

4

IDENTITY子句不喜歡變量。使用sp_executesql的運行ALTER聲明:

-- Get CurrentRowCount 
DECLARE @MaxID INT 

SELECT @MaxID = ISNULL(MAX(WorkTypeID),0) 
FROM caWorkType 

DECLARE @sql varchar(max); 
SET @sql = 'ALTER TABLE #WorkType ADD _RowID INT NOT NULL IDENTITY(' + 
     CAST(@MaxID as varchar) + 
     ',1)'; 
EXEC sp_executesql @statement = @sql; 
+0

好主意,謝謝 – StevenMcD 2009-11-30 05:47:58