【发布时间】:2018-12-21 11:00:01
【问题描述】:
我尝试使用游标查询我的实例以获取 n 个数据库的所有数据库对象的列表,但无济于事
DROP TABLE IF EXISTS #temp
SELECT * into #temp from ( select DB_NAME() AS [database_name], sys.schemas.name + '.' + sys.objects.name as [object_name],
type as [schema_name], type_desc as [Object_Description]
FROM sys.objects
INNER JOIN sys.schemas ON sys.objects.schema_id = sys.schemas.schema_id
where type in
(
'p', 'pc', -- stored procs
'v', -- views
'tf', 'if', 'ft', -- table-valued functions
'fn', 'fs', -- scalar-valued functions
'af' -- aggregate functions
) )as [SomeAlias]
--select *from #temp
DECLARE @name sysname;
DECLARE @sql nvarchar(max) =
'select databse_name , schema_name ,object_name , Object_Description from #temp'
DECLARE @theSQL nvarchar(max);
DECLARE @results TABLE (
[database_name] sysname,
[object_name} sysname,
[schema_name] sysname,
[Object_Description] sysname
);
DECLARE dbs CURSOR STATIC LOCAL FORWARD_ONLY READ_ONLY
FOR
SELECT name
FROM sys.databases;
-- you may want to exclude system databases here
-- WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb', 'distribution')
OPEN dbs;
FETCH NEXT FROM dbs INTO @name;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @theSQL = 'EXEC ' + QUOTENAME(@name) + '.sys.sp_executesql @sql';
INSERT @results
EXEC sys.sp_executesql @theSQL, N'@sql nvarchar(max)', @sql
FETCH NEXT FROM dbs INTO @name;
END
CLOSE dbs;
DEALLOCATE dbs;
SELECT *
FROM @results;
【问题讨论】:
标签: tsql sql-server-2016 database-cursor