Sql server sqlcmd脚本变量理解问题
尝试使用一些变量从powershell运行sqlcmd。 但是得到了错误 简单的测试。我知道这个选择非常简单,但足以说明问题所在 这是我的sql文件的内容:Sql server sqlcmd脚本变量理解问题,sql-server,variables,sqlcmd,Sql Server,Variables,Sqlcmd,尝试使用一些变量从powershell运行sqlcmd。 但是得到了错误 简单的测试。我知道这个选择非常简单,但足以说明问题所在 这是我的sql文件的内容: USE [master] select name from sys.databases where NAME = $(db) GO 现在我运行这个: sqlcmd-S testserver-v db=“Test”-i\mssql\u duplicate\testvariable.sql 我得到以下信息: Meldung“207”、Ebe
USE [master]
select name from sys.databases where NAME = $(db)
GO
现在我运行这个:
sqlcmd-S testserver-v db=“Test”-i\mssql\u 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 Server会将变量解释为对象名称,因此会出现错误。SQLCMD变量可以替换任何内容,特别是数据库和对象的名称。但是,在您的示例中,它被用作普通参数,应该是
nvarchar(128)
数据类型。因此,您的代码应该如下所示:
USE [master];
select name from sys.databases where NAME = N'$(db)';
GO
如果没有单引号,SQL Server会将变量解释为对象名,因此会出现错误。LOL。。。非常感谢你。我尝试了不同的语法,但这最终是正确的。@MarcelS,同样,在这种情况下,文字应该是
N'$(db)
来表示Unicode文字,如果只使用ANSI字符则无关紧要。LOL。。。非常感谢你。我尝试了不同的语法,但这最终是正确的。@MarcelS,在这种情况下,文字应该是N'$(db)
,以表示Unicode文字,如果只使用ANSI字符则无关紧要。