繁体   English   中英

传递变量mssql时列名无效

[英]invalid column name when passing variable mssql

我正在用以下代码片段遇到这个奇怪的问题:

DECLARE @dbname nvarchar(128)
SET @dbname = $(databaseName)

IF (EXISTS (SELECT name 
FROM master.dbo.sysdatabases 
WHERE ('[' + name + ']' = @dbname 
OR name = @dbname)))

-- code mine :)
PRINT 'true'

我通过这样的命令行传递它:

"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd.exe" -U user -P password -i C:\checkDB.sql -v databaseName=newdatabasetest1

当我尝试在此处运行命令时收到此错误:

Msg 207, Level 16, State 1, Server SERVERNAME, Line 2
Invalid column name 'newdatabasetest1'.

如果我更改查询以将$ {databaseName)替换为'newdatabasetest1',则它会正常工作并按预期返回'true'...

我不确定在这里做错什么,或者也许这是SQL问题,但似乎仅在命令行方面有问题。 我使用相同的传递变量技术来创建和删除运行良好的数据库。

任何指导都会有所帮助!

解决方案是执行SET @dbname = '$(databaseName)'而不是SET @dbname = $(databaseName)它可以在实际的查询程序中使用,但是通过命令行失败,在变量fix上打勾

您需要将单引号添加到分配给@dbname的值,如下所示:

DECLARE @dbname nvarchar(128)
SET @dbname = '$(databaseName)'

IF (EXISTS (SELECT name 
FROM master.dbo.sysdatabases 
WHERE ('[' + name + ']' = @dbname 
OR name = @dbname)))

PRINT 'true'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM