【问题标题】:Alter Table in Stored Procedure在存储过程中更改表
【发布时间】:2011-07-29 12:11:15
【问题描述】:

第一次发帖,如果这个问题已经回答,请告诉我!我试着四处寻找,但找不到任何东西。

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

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”等效项?)

非常感谢任何帮助!

【问题讨论】:

  • 我在 SQl 2005 上运行它并没有任何错误地获得了所需的输出。
  • 忘了注意,我为此坚持使用 SQL 2000 :(

标签: tsql stored-procedures sql-server-2000 alter-table


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多