Проблема понимания переменных сценариев sqlcmd - PullRequest
1 голос
/ 13 июня 2019

попробуйте запустить sqlcmd из powershell с некоторыми переменными.Но получите ошибку.

Простой тест.Я знаю, что этот выбор действительно прост, но этого достаточно, чтобы показать проблему.

это содержимое моего файла sql:

USE [master]
select name from sys.databases  where NAME = $(db)
GO

Теперь я запускаю это: sqlcmd -S testserver -v db="Test" -i \mssql_duplicate\testvariable.sql

я получаю следующее сообщение:

Meldung "207", Ebene "16", Статус "1", Сервер "testserver", Zeile 2 "Ungültiger Spaltenname " Test "."

Итак, мой вопрос: почему sqlcmd делает это преобразование?Когда я помещаю его имя в сценарий sql, он работает нормально:

USE [master]
select name from sys.databases  where NAME = "TEST"
GO

sqlcmd -S testserver -i \mssql_duplicate\testvariable.sql

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 13 июня 2019

Переменные SQLCMD могут заменять что угодно, в частности имена баз данных и объектов. Однако в вашем примере он используется как обычный параметр, который должен иметь тип данных nvarchar(128). Итак, ваш код должен выглядеть так:

USE [master];
select name from sys.databases  where NAME = N'$(db)';
GO

Без одинарных кавычек, SQL Server интерпретирует вашу переменную как имя объекта, следовательно, ошибка.

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