[英]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.