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服务器将您的变量解释为对象名称,因此会出现错误。
尝试使用一些变量从 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服务器将您的变量解释为对象名称,因此会出现错误。