今天早上我已经多次查看了这个问题并且找不到问题。它可能很简单,当有人指出它时,我会觉得自己像个白痴。这个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'附近的语法不正确”我已经检查过,并且select语句将@MaxID设置为45。临时表#WorkType也没有名为“_RowID”的列
答案 0 :(得分: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;
答案 1 :(得分:2)
尝试将列添加到失败的临时表不是一种行为,但是在指定IDENTITY
的值时不能使用变量:
不行:
ALTER TABLE #WorkType ADD _RowID INT NOT NULL IDENTITY(@MaxID,1)
确定强>:
ALTER TABLE #WorkType ADD _RowID INT NOT NULL IDENTITY(55,1)
马克