Почему: r Команда SQLCMD помечена как неверная в сценарии после развертывания?


17

Я пару раз работал со сценариями после развертывания и всегда интуитивно использовал действие сборки «PostDeploy», потому что это то, что он есть. Теперь я впервые пытаюсь следовать встроенной инструкции из шаблона скрипта, чтобы использовать ":r somescript.sql"синтаксис.

Сразу эта строка помечается как неправильная:

"SQL80001 неверный синтаксис рядом с ':'"

Я нашел предложения, чтобы установить PDS для Build Action "none". Это не помогает, ошибка остается. Что мне здесь не хватает?


извините, я думаю, что будет более ясным "какое действие установлено для сценария, в котором есть": r "внутри?" :)
Эд Эллиотт

Ответы:


15

Предполагая, что ошибка происходит во время процесса сборки, и что у вас нет никаких фактических синтаксических ошибок, и это просто

:r path\to\file.sql

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

Если во время разработки вы хотите увидеть ошибку, о которой сообщает процесс сборки, обязательно включите «режим SQLCMD» в редакторе T-SQL в Visual Studio. Справа в панели кнопок есть кнопка с "!" в этом, что должно позволить это. Или вы можете перейти в меню SQL , выбрать Transact-SQL Editor -> , выбрать « Настройки выполнения» -> , а затем, наконец, выбрать режим SQLCMD . Теперь, когда вы выполняете скрипт, он будет правильно интерпретировать :r, как это делает процесс сборки / публикации.

Кроме того, для вашего сценария Post Deploy (PDS) должно быть установлено действие сборки для PostDeploy . Если для этого параметра установлено значение None, процесс сборки SSDT будет полностью пропущен.


4

Допустимая ошибка

Это потому, что :r somescript.sqlне является действительным sql. Вы видите синтаксическую ошибку, которая точно соответствует сообщению об ошибке.

SQL80001: Неверный синтаксис рядом с ':'.

Режим SQLCMD

Сценарий после развертывания выполняется в режиме SQLCMD.

Утилита sqlcmd позволяет вводить операторы Transact-SQL, системные процедуры и файлы сценариев в командной строке, в редакторе запросов в режиме SQLCMD, в файле сценария Windows или в шаге задания операционной системы (Cmd.exe) SQL Server. Агентская работа. Эта утилита использует ODBC для выполнения пакетов Transact-SQL.

разрешение

Помните, что вы можете подключиться к БД и выполнить sql из Visual Studio. Вы увидите ту же синтаксическую ошибку, если откроете тот же скрипт в SSMS. Однако как в SSMS, так и в Visual Studio вы можете «включить» режим SQLCMD.

VS 2017

  • щелкните правой кнопкой мыши редактор, содержащий скрипт sql
  • нажмите Настройки выполнения
  • нажмите режим SQLCMD
  • Обратите внимание, что вы можете сделать то же самое из меню SQL

SSMS 17, SSMS 18

  • Запрос (пункт меню)
  • Режим SQLCMD

Смотрите также

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.