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.