Объявите глобальные переменные для пакета операторов выполнения - PullRequest
3 голосов
/ 03 июня 2010

У меня есть оператор SQL, в котором я пытаюсь обновить таблицу на компьютере клиента.SQL-оператор выглядит следующим образом:

    BEGIN TRANSACTION


    DECLARE @CreatedBy INT

    SELECT  @CreatedBy = [User_Id]
    FROM    Users
    WHERE   UserName = 'Administrator'

    --////////////////////////////////////////////////////////////////////
    --////////////////////////////////////////////////////////////////////

    PRINT @CreatedBy --(Works fine here and shows me the output)

    PRINT N'Rebuilding [dbo].[Some_Master]'
    ALTER TABLE [dbo].[Some_Master]
    ADD [CreatedBy] [BIGINT] NULL,
        [Reason] [VARCHAR](200) NULL
    GO

    PRINT @CreatedBy --(does not work here and throws me an error)


    PRINT N'Updating data in [Some_Master] table'
    UPDATE  Some_Master
    SET     CreatedBy = @CreatedBy

    COMMIT TRANSACTION

, но я получаю следующую ошибку:

Должен объявить скалярную переменную "@CreatedBy".

Теперь я заметилесли я напишу оператор Print над командой alter, он будет работать нормально и покажет мне его значение, но если я попытаюсь распечатать значение после команды Alter, он выдаст мне ошибку, указанную выше.

Я не знаю, почему??Пожалуйста, помогите!

Спасибо

Ответы [ 3 ]

3 голосов
/ 03 июня 2010

Это из-за GO, который сигнализирует об окончании пакета команд. Таким образом, после GO это отдельный пакет, в котором переменная @CreatedBy больше не находится в области действия.

Попробуйте удалить операторы GO.

1 голос
/ 03 июня 2010

Удалить оператор "GO".

1 голос
/ 03 июня 2010

Я думаю, вам нужно удалить оператор GO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...