【问题标题】:sqlcmd scripting variables understanding problemsqlcmd脚本变量理解问题
【发布时间】:2023-04-09 07:00:01
【问题描述】:

尝试使用一些变量从 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 “测试”。”

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

USE [master]
select name from sys.databases  where NAME = "TEST"
GO

sqlcmd -S testserver -i \mssql_duplicate\testvariable.sql

感谢您的帮助!

【问题讨论】:

    标签: sql-server variables sqlcmd


    【解决方案1】:

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

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

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

    【讨论】:

    • 大声笑...非常感谢。我尝试了不同的语法,但这最终是正确的。
    • @MarcelS,同样,在这种情况下,文字应该是 N'$(db)' 来表示 Unicode 文字,如果你只使用 ANSI 字符,这并不重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    相关资源
    最近更新 更多