修改存储过程中的表



第一次发帖,如果这个问题已经有人回答了,请告诉我!我试着到处找,但什么也找不到。

在我的存储过程中,当我做一些修改时,我选择到一个临时表中(我将其简化为基本问题)。

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

最新更新