尝试使用某些变量从powershell运行sqlcmd。 但是会出错。
简单测试。我知道这个选择确实很简单,但是足以显示问题。
这是我的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ültigerSpaltenname “测试”。”
所以我的问题是:为什么sqlcmd会执行此转换? 当我将他的名字放在sql脚本中时,它运行良好:
USE [master]
select name from sys.databases where NAME = "TEST"
GO
sqlcmd -S testserver -i \mssql_duplicate\testvariable.sql
感谢您的帮助!
答案 0 :(得分:0)
SQLCMD变量可以替换任何内容,特别是数据库和对象的名称。但是,在您的示例中,它用作普通参数,该参数应为nvarchar(128)
数据类型。因此您的代码应如下所示:
USE [master];
select name from sys.databases where NAME = N'$(db)';
GO
没有单引号,SQL Server会将变量解释为对象名称,因此会出错。