sqlcmd脚本变量理解问题

时间:2019-06-13 07:52:38

标签: 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_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

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

SQLCMD变量可以替换任何内容,特别是数据库和对象的名称。但是,在您的示例中,它用作普通参数,该参数应为nvarchar(128)数据类型。因此您的代码应如下所示:

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

没有单引号,SQL Server会将变量解释为对象名称,因此会出错。