sql-server - 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
谢谢你的帮助!
解决方案
SQLCMD 变量可以替换任何东西,特别是数据库和对象的名称。但是,在您的示例中,它用作普通参数,应该是nvarchar(128)
数据类型。所以你的代码应该是这样的:
USE [master];
select name from sys.databases where NAME = N'$(db)';
GO
如果没有单引号,SQL Server 会将您的变量解释为对象名称,因此会出现错误。
推荐阅读
- vb.net - SendMessage 关闭监视器使一些系统在 vb 中休眠
- c++ - MFC 找不到资源
- json - 带有 Flutter 的实时数据库覆盖数据而不是将其添加到现有节点
- elasticsearch - 如何在索引时停止在内容中存储特殊字符
- spring-webflux - 如果我们使用 WebFlux,我们需要 Hystrix 吗?
- flutter - Flutter如何刷audio_service包的通知?
- xpages - (XPages)如何更改横幅颜色?
- c# - 改进多对多关系的 LINQ 查询
- flutter - 在你的 Flutter 应用中保存 Stripe 的密钥
- azure - 在 azure 部署的应用程序中更新 appsettings.json 值