use*_*359 5 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'
Run Code Online (Sandbox Code Playgroud)
我正在通过命令行传递它:
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd.exe" -U user -P password -i C:\checkDB.sql -v databaseName=newdatabasetest1
Run Code Online (Sandbox Code Playgroud)
当我在这里尝试运行命令时出现此错误:
Msg 207, Level 16, State 1, Server SERVERNAME, Line 2
Invalid column name 'newdatabasetest1'.
Run Code Online (Sandbox Code Playgroud)
如果我更改查询以使用'newdatabasetest1'替换$(databaseName),它将起作用并按预期返回'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'
Run Code Online (Sandbox Code Playgroud)
解决方案是这样做,
SET @dbname = '$(databaseName)'
而不是
SET @dbname = $(databaseName)
在实际的查询程序中工作,但是通过命令行它失败了,变量上的刻度修复了这个问题
| 归档时间: |
|
| 查看次数: |
2464 次 |
| 最近记录: |