首页 > 解决方案 > 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", Status "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_duplicate\testvariable.sql

谢谢你的帮助!

标签: sql-servervariablessqlcmd

解决方案


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

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

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


推荐阅读