Изменить таблицу в хранимой процедуре - PullRequest
0 голосов
/ 05 апреля 2011

При первой публикации, пожалуйста, дайте мне знать, если на этот вопрос уже был дан ответ!Я попытался поискать, но ничего не смог найти.

В своей хранимой процедуре я выбираю временную таблицу, в то время как я делаю некоторые изменения (я перешел к основной проблеме).

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

В Query Analyzer, если вы выделите и запустите их отдельно, я получу желаемый результат.

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 после каждой команды, и код работал в анализаторе запросов.Однако я не могу понять, как повторить это в хранимой процедуре.(Есть ли эквивалент «GO» для s-procs?)

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 05 апреля 2011

GO не является частью T-SQL, это пакетный разделитель, поддерживаемый рядом инструментов SQL Server.

Как правило, вы можете сделать ALTER TABLE с EXEC, но если ваша проблема с требованием 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...