Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server sqlcmd脚本变量理解问题_Sql Server_Variables_Sqlcmd - Fatal编程技术网

Sql server sqlcmd脚本变量理解问题

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

尝试使用一些变量从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”、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字符则无关紧要。