我用这段代码遇到了这个奇怪的问题:
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'它起作用并且返回真实的'正如所料......
我不确定我在这里做错了什么,或者它可能是SQL的事情,但它似乎只有命令行问题。我使用相同的传递变量技术来创建和删除一个工作正常的数据库。
任何指导都会有所帮助!
答案 0 :(得分:3)
解决方案就是这样做
SET @dbname = '$(databaseName)'
代替
SET @dbname = $(databaseName)
它在实际的查询程序中工作,但通过命令行失败,变量上的滴答修复了
答案 1 :(得分:2)
您需要在分配给@dbname的值中添加单引号,如下所示:
DECLARE @dbname nvarchar(128)
SET @dbname = '$(databaseName)'
IF (EXISTS (SELECT name
FROM master.dbo.sysdatabases
WHERE ('[' + name + ']' = @dbname
OR name = @dbname)))
PRINT 'true'