Sql server 遍历所有表中的所有DBs-Get约束
我试图通过列出所有表约束来遍历所有数据库。我取得了以下成就:Sql server 遍历所有表中的所有DBs-Get约束,sql-server,foreach,constraints,sql-server-2016,dynamic-sql,Sql Server,Foreach,Constraints,Sql Server 2016,Dynamic Sql,我试图通过列出所有表约束来遍历所有数据库。我取得了以下成就: DECLARE @sql nvarchar(max) = '' SET @sql = ' USE ? select con.[name] as constraint_name, schema_name(t.schema_id) + ''.'' + t.[name] as [table], col.[name] as column_name, con.[definition], case whe
DECLARE @sql nvarchar(max) = ''
SET @sql =
'
USE ?
select con.[name] as constraint_name,
schema_name(t.schema_id) + ''.'' + t.[name] as [table],
col.[name] as column_name,
con.[definition],
case when con.is_disabled = 0
then ''Active''
else ''Disabled''
end as [status]
from sys.check_constraints con
left outer join sys.objects t
on con.parent_object_id = t.object_id
left outer join sys.all_columns col
on con.parent_column_id = col.column_id
and con.parent_object_id = col.object_id
order by con.name
'
PRINT @sql
EXEC sp_MSforeachdb @sql
我希望查询将我的所有结果合并到一个干净的select中
有人能帮忙吗
使用SQL Server 2016。一种方法是将中间结果插入临时表。下面的示例还包括结果中的数据库名称
CREATE TABLE #results (
[database_name] sysname
,[constraint_name] nvarchar(128)
,[table] nvarchar(257)
,[column_name] nvarchar(128)
,[definition] nvarchar(max)
,[status] varchar(8)
);
DECLARE @sql nvarchar(max) = ''
SET @sql =
N'
USE [?];
INSERT INTO #results
select
N''?'' as database_name,
con.[name] as constraint_name,
schema_name(t.schema_id) + ''.'' + t.[name] as [table],
col.[name] as column_name,
con.[definition],
case when con.is_disabled = 0
then ''Active''
else ''Disabled''
end as [status]
from sys.check_constraints con
left outer join sys.objects t
on con.parent_object_id = t.object_id
left outer join sys.all_columns col
on con.parent_column_id = col.column_id
and con.parent_object_id = col.object_id;
';
PRINT @sql;
EXEC sp_MSforeachdb @sql;
SELECT * FROM #results;
一种方法是将中间结果插入临时表。下面的示例还包括结果中的数据库名称
CREATE TABLE #results (
[database_name] sysname
,[constraint_name] nvarchar(128)
,[table] nvarchar(257)
,[column_name] nvarchar(128)
,[definition] nvarchar(max)
,[status] varchar(8)
);
DECLARE @sql nvarchar(max) = ''
SET @sql =
N'
USE [?];
INSERT INTO #results
select
N''?'' as database_name,
con.[name] as constraint_name,
schema_name(t.schema_id) + ''.'' + t.[name] as [table],
col.[name] as column_name,
con.[definition],
case when con.is_disabled = 0
then ''Active''
else ''Disabled''
end as [status]
from sys.check_constraints con
left outer join sys.objects t
on con.parent_object_id = t.object_id
left outer join sys.all_columns col
on con.parent_column_id = col.column_id
and con.parent_object_id = col.object_id;
';
PRINT @sql;
EXEC sp_MSforeachdb @sql;
SELECT * FROM #results;