sql >> Databáze >  >> RDS >> Sqlserver

Jak získat seznam omezení primárního klíče ze všech databází na instanci SQL Server - SQL Server / Výukový program TSQL, část 60

Scénář:

Pracujete na dokumentaci databázových objektů a budete požádáni, abyste poskytli seznam všech omezení primárního klíče na všech databázových tabulkách v celé instanci SQL Server. Jak byste poskytli seznam všech omezení primárního klíče s názvem databáze, názvem schématu, názvem tabulky, názvem sloupce, názvem omezení?

Řešení:

K získání informací o omezení primárního klíče použijeme systémová zobrazení. Protože potřebujeme spustit dotaz na celou databázi, budeme používat kurzor s dynamickým sql. Pro každou databázi vložíme výsledky do dočasné tabulky a nakonec vybereme výsledek na konci z dočasné tabulky pro zobrazení.

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



Provedu výše uvedený dotaz na instanci SQL Server a získal jsem seznam všech omezení primárního klíče s názvem databáze, názvem schématu, názvem tabulky, názvem sloupce a názvem omezení, jak je uvedeno níže.
Jak získat seznam všech omezení primárního klíče z každé databáze z instance SQL Server - SQL Server / Výukový program T-SQL
  1. Přidejte klauzule WHERE do SQL dynamicky / programově

  2. Sada problémů 1 – Identifikace entit

  3. Chyba mysql node.js:ECONNREFUSED

  4. Hodnota Postgres SSLMode vyžaduje neplatnost, když podpora SSL není zkompilována pomocí Foreign Data Wrapper