使用 Space 获取数据库名称

Fetching Database Name with Space

感谢您查看我的 post。我正在尝试 运行 查询 SQL 服务器中的所有数据库,但如果数据库包含 space 并且数据库在线,则游标不会获取。

代码

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.

Delimit 标识对象的名称。通常用方括号 ([]) 将其括起来,但是,由于这似乎是动态的 SQL,您应该使用 QUOTENAME:

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

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