Символ выхода из пространства с помощью setvar в SQL Server Management Studio - PullRequest
4 голосов
/ 17 декабря 2010

Во-первых, я не администратор баз данных, и у меня нет никакого (админского) опыта работы с SQL Server, поэтому, пожалуйста, используйте слова с несколькими слогами при ответе ...

Я использую SQL Server 2008 R2 и пытаюсь написать сценарий проверки концепции, который настраивает неразделенную двунаправленную репликацию транзакций. Мне удалось настроить скрипт с сайта MS для работы, теперь я пытаюсь настроить его под наши нужды. Это включает вытягивание нескольких значений в переменные.

Я установил SSMS в «Режим SQLCMD», и все мои переменные в порядке, кроме одной.

:setvar ReplicationDirectory 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2\MSSQL\repldata';

Это дает мне ошибку:

Произошла фатальная ошибка скриптинга. При синтаксическом анализе обнаружен неправильный синтаксис: setvar

Я сузил свою проблему до наличия пробелов в значении переменной. Согласно тому, что я читал, это должно работать без проблем. Я пытался заменить одинарные кавычки на двойные (как в обычном, так и в угловом виде), но все они дают мне ту же ошибку.

Я не могу найти в Интернете ничего, что подсказывало бы мне, как мне избежать пробела. Все статьи, которые я видел, говорят, что если строка в кавычках, SSMS просто интерпретирует все, что находится между ними, как одну строку - независимо от пробела.

У кого-нибудь есть идеи?

Полагаю, я мог бы изменить значение переменной на:

:setvar ReplicationDirectory 'C:\Progra~1\Micros~1\MSSQL10_50.SQL2\MSSQL\repldata';

Но я бы лучше решил "почему я не могу использовать пробелы?" проблема вместо.

Большое спасибо.

Tom

Ответы [ 2 ]

11 голосов
/ 17 декабря 2010

Используйте двойные, а не одинарные кавычки:

:setvar ReplicationDirectory "C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2\MSSQL\repldata"

select '$(ReplicationDirectory)' as test

ИЛИ

:setvar ReplicationDirectory "'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2\MSSQL\repldata'"

select $(ReplicationDirectory) as test

Переменные режима SQLCMD действительно являются переменными командной строки, а не переменными T-SQL (которые начинаются с @), и вы должны установить их соответственно.

2 голосов
/ 03 марта 2016

Завершающая точка с запятой вызывает проблемы в дополнение к пробелам в одиночной строке в кавычках.

:setvar test1 'test test'; ошибки в пространстве и точка с запятой

:setvar test1 'test test' ошибки в пространстве

:setvar test3 "test test"; ошибки в точке с запятой

:setvar test4 "test test" делает пробелы пригодными для использования в переменной, так как test test

:setvar test4 "'test test'" делает одинарные кавычки и пробелы пригодными для использования впеременная как 'test test'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...