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 () во время моего первого запуска приложения после установки.
Скотт


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

Не помогает оценка переменной в остальной части скрипта? $ (DatabaseName). [Dbo]. [Whatever]
CRice
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.