Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como obter a lista de restrição de chave primária de todos os bancos de dados na instância do SQL Server - SQL Server / TSQL Tutorial Part 60

Cenário:

Você está trabalhando na documentação de objetos de banco de dados e é solicitado a fornecer a lista de todas as restrições de chave primária em todas as tabelas de banco de dados em toda a Instância do SQL Server. Como você forneceria a lista de todas as restrições de chave primária com Nome do banco de dados, Nome do esquema, Nome da tabela, Nome da coluna, Nome da restrição?

Solução:

Usaremos as visualizações do sistema para obter as informações de restrição de chave primária. Como precisamos executar a consulta em todo o banco de dados, estaremos utilizando o Cursor com sql dinâmico. Para cada banco de dados, inseriremos os resultados na tabela temporária e, finalmente, selecionaremos o resultado no final da tabela temporária para exibição.

USE master
GO
--Declare Variables
DECLARE @DatabaseName AS VARCHAR(500)
--Create Temp Table to Save Results
IF OBJECT_ID('tempdb..#Results') IS NOT NULL
    DROP TABLE #Results
CREATE TABLE #Results (
    ServerName VARCHAR(128)
    ,DatabaseName VARCHAR(128)
    ,SchemaName VARCHAR(128)
    ,TableName VARCHAR(128)
    ,ColumnName VARCHAR(128)
    ,ConstraintName VARCHAR(128)
    )
DECLARE CUR CURSOR
FOR
SELECT '[' + NAME + ']' AS DBName
FROM sys.databases
WHERE NAME NOT IN (
        'master'
        ,'tempdb'
        ,'model'
        ,'msdb'
        )
OPEN Cur
FETCH NEXT
FROM Cur
INTO @DatabaseName
WHILE @@FETCH_STATUS = 0
BEGIN
    --Build dynamic sql for each database 
    DECLARE @SQL VARCHAR(MAX) = NULL
    SET @SQL = 'Insert into #Results
      Select
      @@ServerName,
   TC.Table_Catalog as DatabaseName,
   TC.Table_Schema AS TableSchema,
   TC.Table_Name AS TableName,
   CCU.Column_Name AS ColumnName,
   TC.Constraint_Name AS ConstraintName 
From' + @DatabaseName + '.information_Schema.Table_Constraints TC  
INNER JOIN
   ' + @DatabaseName + 
'.Information_Schema.constraint_column_usage CCU  
      on TC.Constraint_Name=CCU.Constraint_Name  
      and TC.Table_Name=CCU.Table_Name  
where
   Constraint_Type=''PRIMARY KEY'''
    EXEC (@SQL)
    PRINT @SQL
    FETCH NEXT
    FROM Cur
    INTO @DatabaseName
END
CLOSE Cur
DEALLOCATE Cur
--Select all records from temp table for Primary Key 
--Constraint Information
SELECT *
FROM #Results



Eu executo a consulta acima na minha instância do SQL Server e obtive a lista de todas as restrições de chave primária com nome do banco de dados, nome do esquema, nome da tabela, nome da coluna e nome da restrição conforme mostrado abaixo.
Como obter a lista de todas as restrições de chave primária de cada banco de dados da instância do SQL Server - SQL Server /T-SQL Tutorial