sqlcmd 脚本变量理解问题



尝试使用一些变量从PowerShell运行sqlcmd。 但是得到错误。

简单的测试。我知道这个选择真的很简单,但它足以显示问题。

这是我的SQL文件的内容:

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

现在我运行这个:sqlcmd -S testserver -v db="Test" -i mssql_duplicatetestvariable.sql

我收到以下消息:

Meldung "207", Ebene "16", 状态 "1", 服务器 "testserver", Zeile 2 "Ungültiger Spaltenname 'Test'.">

所以我的问题:sqlcmd 为什么要进行这种转换? 当我把他的名字放在sql脚本中时,它运行良好:

USE [master]
select name from sys.databases  where NAME = "TEST"
GO
sqlcmd -S testserver -i mssql_duplicatetestvariable.sql

感谢您的帮助!

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

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

如果没有单引号,SQL Server 会将变量解释为对象名称,从而导致错误。

最新更新