获取带有空格的数据库名称

ffscu2ro  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(357)

谢谢你查看我的帖子。我试图在sql server中的所有数据库上运行一个查询,但是如果数据库包含空间并且数据库处于联机状态,则光标不会提取。
代码

DECLARE @tsql nvarchar(max)
DECLARE @dbname nvarchar(max)

DECLARE MyCur CURSOR STATIC FORWARD_ONLY FOR
SELECT [name] 
FROM sys.databases 
 -- WHERE [name] NOT IN ('tempdb','Managed Metadata Service_9393')
--and state_desc='ONLINE' 

OPEN MyCur 

WHILE (1=1)   
BEGIN   
FETCH NEXT FROM MyCur INTO @dbname

IF @@FETCH_STATUS <> 0 
    BREAK 

SET @tsql = 'use ' + @dbname + ' select @@servername'
EXEC sp_executesql @tsql 
END   

CLOSE MyCur;   
DEALLOCATE MyCur;

错误

Msg 911, Level 16, State 1, Line 1
 Database 'Managed' does not exist. Make sure that the name is entered correctly.
u7up0aaq

u7up0aaq1#

分隔标识对象的名称。一般来说就是用括号括起来( [] )但是,由于这似乎是动态sql,您应该使用 QUOTENAME :

SET @tsql = N'USE ' + QUOTENAME(@dbname) + N'; SELECT @@servername;';

但是,理想情况下,不要使用要求您对对象进行分隔和标识的对象名。

相关问题