代码之家  ›  专栏  ›  技术社区  ›  StevenMcD

尝试将列添加到临时表失败

  •  3
  • StevenMcD  · 技术社区  · 15 年前

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

    2 回复  |  直到 15 年前
        1
  •  2
  •   marc_s HarisH Sharma    15 年前

    尝试向临时表中添加列并没有失败,但不能使用变量指定列的值 IDENTITY :

    不好 :

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

    :

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

    马克

        2
  •  4
  •   devstuff    15 年前

    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;