尝试使用一些变量从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 会将变量解释为对象名称,从而导致错误。