sqlcmd脚本变量理解问题

sqlcmd scripting variables understanding problem

尝试使用一些变量从 powershell 运行 sqlcmd。 但是报错。

简单测试。我知道这个select确实很简单但是足以说明问题了

这是我的 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 "测试."

所以我的问题是:为什么 sqlcmd 进行这种转换? 当我在 sql 脚本中输入他的名字时 运行 没问题:

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

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

感谢您的帮助!

SQLCMD 变量可以替代任何东西,特别是数据库和对象的名称。但是,在您的示例中,它用作普通参数,应该是 nvarchar(128) 数据类型。所以你的代码应该是这样的:

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

没有单引号,SQL服务器将您的变量解释为对象名称,因此会出现错误。