Подтвердить что ты не робот

Неправильный синтаксис около 'GO'

Как я могу выполнить следующий SQL внутри одной команды (одно выполнение) через ADO.NET?

ALTER TABLE [MyTable]
    ADD NewCol INT

GO

UPDATE [MyTable] 
    SET [NewCol] = 1

Секундомер GO не поддерживается, и без него второй оператор терпит неудачу.

Есть ли какие-либо решения для этого, кроме использования нескольких command исполнений?

4b9b3361

Ответ 1

Ключевое слово GO - это не T-SQL, а артефакт SQL Server Management Studio, который позволяет вам разделить выполнение файла script несколькими партиями. Т.е. когда вы запускаете файл T-SQL script в SSMS, операторы выполняются партиями, разделенными ключевым словом GO. Более подробную информацию можно найти здесь: https://msdn.microsoft.com/en-us/library/ms188037.aspx

Если вы прочтете это, вы увидите, что sqlcmd и osql также поддерживают GO.

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

Ответ 3

Вы также получите эту ошибку, если вы использовали операторы IF и неправильно закрыли их.

Помните, что вы должны использовать BEGIN/END, если оператор IF длиннее одной строки.

Это работает:

IF @@ROWCOUNT = 0
PRINT 'Row count is zero.'

Но если у вас две строки, это должно выглядеть так:

IF @@ROWCOUNT = 0
BEGIN
PRINT 'Row count is zero.'
PRINT 'You should probably do something about that.'
END