SQL Server ': setvar' Ошибка

123

Я пытаюсь создать несколько переменных сценария в T-SQL следующим образом:

    /*
    Deployment script for MesProduction_Preloaded_KLM_MesSap
    */

    GO
    SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;

    SET NUMERIC_ROUNDABORT OFF;


    GO
    :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

Однако, когда я запускаю это, я получаю сообщение об ошибке «Неправильный синтаксис рядом с»: ». Что я делаю не так?

Рэнди Миндер
источник

Ответы:

239

: Setvar работает только в командном режиме SQL, поэтому вы, возможно, находитесь в обычном режиме выполнения SQL в студии управления и не перешли в командный режим.

Это можно сделать через пользовательский интерфейс в SQL Server Management Studio, перейдя в меню «Запрос» и выбрав «Режим SQLCMD».

Андрей
источник
19
Это также проблема при использовании утилиты Visual Studio: Data> Schema Compare. Если вы запустите полученный скрипт изменения из утилиты, все в порядке, но если вы решите экспортировать / xcopy скрипт изменения после выполнения сравнения, а затем попытаетесь импортировать / вставить полученный скрипт изменения в SSMS, то, как указано выше, он потерпит неудачу. Очевидно, это также может быть проблемой, если вы включаете сценарий изменения базы данных в связанное развертывание. Таким образом, вам необходимо включить командный режим SQL перед запуском сценария либо через меню, как указано выше, либо убедиться, что ваш настраиваемый сценарий установки делает это перед запуском.
rism
6
В Visual Studio (2013): меню SQL-> Параметры выполнения-> Режим
SQLCMD
Я столкнулся с этой проблемой, пытаясь использовать сгенерированный сценарий сравнения сценариев для создания моей базы данных из моего приложения при первом запуске после установки, передавая сценарий в executenonquery (). Мне нужно либо найти способ выполнить это в режиме SQLCMD, либо взломать скрипт, заменив для начала все переменные.
Скотт
Просто к вашему сведению - я использовал сценарий создания, сгенерированный при публикации моего проекта БД, а затем удалил все ссылки на переменные, на которые ссылается setvar. Я жестко запрограммировал имя своей базы данных, поэтому вместо CREATE DATABASE [$ DatabaseName] было просто CREATE DATABASE MYDBNAME. Этот сценарий теперь работает для создания моей базы данных с помощью executenonquery () во время моего первого запуска приложения после установки.
Скотт
10

Просто включите режим sqlcmd в SQL Server Management Studio, как показано на следующем изображении.

введите описание изображения здесь

Мухаммад Авайс
источник
2

ДЛЯ SQL2012:

перейдите в: tools / options / Query Execution и установите флажок по умолчанию, открывать новые запросы в режиме SQLCMD.

Нажмите кнопку «Новый запрос» и убедитесь, что определения переменных выделены. Теперь ваш скрипт должен работать правильно.

Предыдущие версии:

http://blog.sqlauthority.com/2013/06/28/sql-server-how-to-set-variable-and-use-variable-in-sqlcmd-mode/

Терренс Гарри Холмс
источник
Visual Studio также будет сообщать об ошибках синтаксиса в вашем проекте, когда открыт файл .sql, который использует: setvar. Описанное здесь изменение параметров устранит ошибки и позволит избежать «красного волнистого подчеркивания» из оператора (вам придется закрыть и снова открыть все открытые файлы .sql, чтобы увидеть эффект).
BRebey
0

попробуйте заменить :setvar DatabaseName "MesProduction_Preloaded_KLM_MesSap"

с участием:

USE [MesProduction_Preloaded_KLM_MesSap]
GO
KM.
источник
Не помогает оценка переменной в остальной части скрипта? $ (DatabaseName). [Dbo]. [Whatever]
CRice