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”的列

4

2 回答 2

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;
于 2009-11-30T05:30:11.740 回答
2

这不是尝试将列添加到失败的临时表的行为,但您不能使用变量来指定以下值IDENTITY

不好

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

好的

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

马克

于 2009-11-30T05:27:06.630 回答