传递变量mssql

时间:2015-11-25 23:28:49

标签: sql-server sql-server-2008 sql-server-2008-r2

我用这段代码遇到了这个奇怪的问题:

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的事情,但它似乎只有命令行问题。我使用相同的传递变量技术来创建和删除一个工作正常的数据库。

任何指导都会有所帮助!

2 个答案:

答案 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'