2011-04-04 53 views
0

首次发帖,请让我知道这个问题是否已经回答!我试着四处寻找,但找不到任何东西。修改存储过程中的表格

在我的存储过程中,我选择了一个临时表,而我做了一些修改(我已经把它归结为基本问题)。

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

我跑它针对SQl 2005并获得了期望的输出而没有任何错误。 – Chandu 2011-04-04 21:29:01

+0

@Cyber​​nate - 我也是! – 2011-04-04 21:29:47

+0

忘记了,Im在SQL 2000上遇到这个问题:( – TheNoodle 2011-04-04 21:30:51

回答

0

GO不是T-SQL的一部分,它是由许多SQL Server工具支持的批分隔符。

通常你可以做ALTER TABLE与EXEC,但如果你的问题,需要一个改变创建是如何让虚拟列,那么你的具体的例子可以简单地完成后立即:

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 
+0

完美,解决了这个问题。谢谢! – TheNoodle 2011-04-04 21:41:12