第一次发帖,如果这个问题已经有人回答了,请告诉我!我试着到处找,但什么也找不到。
在我的存储过程中,当我做一些修改时,我选择到一个临时表中(我将其简化为基本问题)。
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"?)
任何帮助都非常感谢!
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