2011-04-04 94 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