首次发帖,如果这个问题已经得到解答,请告诉我!我试着四处寻找,但找不到任何东西。
在我的存储过程中,我在进行一些修改时选择了一个临时表(我把它简化为基本问题)。
SELECT 'a' AS ColA, 'b' AS ColB INTO #tmp
ALTER TABLE #tmp
ADD ColC char(5) NULL,
ColD char(5) NULL,
ColE char(5) NULL
UPDATE #tmp
SET ColC = 'c',
ColD = 'd',
ColE = 'e'
FROM #tmp
SELECT * FROM #tmp
在查询分析器中,如果您突出显示&单独运行它们,按顺序,我得到所需的输出。
ColA ColB ColC ColD ColE
---- ---- ----- ----- -----
a b c d e
然而,当我一起运行它们时,我收到以下错误:
(1 row(s) affected)
Msg 207, Level 16, State 1, Line 10
Invalid column name 'colC'.
看起来跳过了ALTER TABLE语句?我在每个命令后插入GO语句,代码在查询分析器中工作。但是,我无法弄清楚如何在存储过程中复制它。 (对于s-procs是否有“GO”等价物?)
非常感谢任何帮助!
答案 0 :(得分:0)
GO不是T-SQL的一部分,它是许多SQL Server工具支持的批处理分隔符。
您通常可以使用EXEC执行ALTER TABLE,但如果您在创建后立即需要ALTER的问题是如何获取虚拟列,那么您的具体示例可以简单地完成:
SELECT 'a' AS ColA
,'b' AS ColB
,CAST(NULL AS char(5)) AS ColC
,CAST(NULL AS char(5)) AS ColD
,CAST(NULL AS char(5)) AS ColE
INTO #tmp
UPDATE #tmp
SET ColC = 'c',
ColD = 'd',
ColE = 'e'
FROM #tmp
SELECT * FROM #tmp