使用 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;';
但是,理想情况下,不要使用要求您分隔标识您的对象的对象名称。
感谢您查看我的 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;';
但是,理想情况下,不要使用要求您分隔标识您的对象的对象名称。