【问题标题】:Trying to add a column to a temp table fails尝试向临时表添加列失败
【发布时间】:2010-12-21 12:54:10
【问题描述】:

今天早上我已经查看了很多次,但找不到问题。它可能非常简单,当有人指出时我会觉得自己像个白痴。这个 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”的列

【问题讨论】:

  • 模式:JIT-SQL,将SQL语句组合到SQL变量中,然后执行语句。

标签: tsql alter-table


【解决方案1】:

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

不行

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

好的

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

马克

【讨论】:

  • 啊好吧!谢谢一百万,代码是由一位前辈给我的,我以为我在把它塞进去。再次感谢。
【解决方案2】:

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;

【讨论】:

    猜你喜欢
    • 2015-10-17
    • 2021-01-14
    • 2016-04-30
    • 2022-01-08
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多