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"

Однак, коли я запускаю це, я отримую помилку, вказуючи "Неправильний синтаксис біля": ". Що я роблю неправильно?

Відповіді:


237

: Setvar працює лише в командному режимі SQL, тому ви, можливо, перебуваєте в звичайному виконанні SQL в студії управління і не перейшли на режим команд.

Це можна зробити через користувальницький інтерфейс у студії управління SQL Server, перейшовши в меню "Запит" та вибравши "Режим SQLCMD".


19
Це також проблема при використанні утиліти Visual Studio: Дані> Схема порівняння. Якщо ви запустили отриманий скрипт зміни з утиліти, вам все в порядку, але якщо ви вирішите експортувати / xcopy змінити сценарій після порівняння, а потім спробуйте імпортувати / вставити отриманий скрипт змін у SSMS, як вище, це не вдасться. Очевидно, це також може бути проблемою, якщо ви включали скрипт зміни db у пакетне розгортання. Таким чином, вам потрібно ввімкнути режим командування SQL перед запуском сценарію або через меню, як зазначено вище, або переконайтесь, що ваш власний сценарій встановлення робить це перед тим, як він запускається.
підйом

6
У Visual Studio (2013): меню SQL-> Параметри виконання-> Режим
SQLCMD

Я зіткнувся з цією проблемою, намагаючись використовувати сценарій порівняння згенерованого сценарію для створення моєї бази даних з моєї програми при першому запуску після установки, передаючи скрипт в Executenonquery (). Мені або потрібно знайти спосіб виконати це через режим SQLCMD або зламати скрипт, що заміняє всі змінні для початку.
Скотт

Просто FYI - я використав сценарій створення, створений при публікації мого проекту БД, а потім видалив усі посилання на змінні, на які посилається setvar. Я жорстко кодував своє ім'я бази даних, тому замість СТВОРИТИ ДАТАБАЗУ [$ DatabaseName], це було просто СТВОРИТИ ДАТАБАЗУ MYDBNAME. Цей сценарій тепер працює для створення моєї бази даних за допомогою Executenonquery () під час мого першого запуску програми після встановлення.
Скотт

10

Просто ввімкніть режим sqlcmd в студії управління SQL Server, як описано на наступному зображенні.

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


2

ДЛЯ SQL2012:

перейдіть до: інструменти / параметри / Виконання запитів і перевірте за замовчуванням, відкрийте нові запити в режимі 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]. [Що б то не було]
CRice
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.