sql-server - 传递变量 mssql 时列名无效

标签 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”,它将正常工作并按预期返回“true”...

我不确定我在这里做错了什么,或者可能是 SQL 问题,但似乎只有命令行有问题。我使用相同的传递变量技术来创建和删除工作正常的数据库。

任何指导都会有帮助!

最佳答案

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

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

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

PRINT 'true'

关于sql-server - 传递变量 mssql 时列名无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33928212/

相关文章:

SQL Server 交叉应用不起作用?

sql - 使用include列和不使用include列创建索引的区别

sql-server - NEWID() 和 PERSISTED 计算列的结果不一致

sql - 比较空字符串与 null 值 - SQL Server

sql - 需要帮助从一个文件夹恢复多个数据库/bak 文件

sql-server - 将多行合并到多列列表中

SQL Server 错误 515

SQL SERVER 2008R2 带有 RAISERROR 的嵌套事务

sql-server - 多列运行总计

python - 从 pyodbc 调用过程时出错