Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak uzyskać listę podstawowych ograniczeń klucza ze wszystkich baz danych w instancji SQL Server — SQL Server / TSQL Tutorial, część 60

Scenariusz:

Pracujesz nad dokumentacją obiektów bazy danych i zostaniesz poproszony o dostarczenie listy wszystkich ograniczeń klucza podstawowego we wszystkich tabelach bazy danych w całej instancji SQL Server. Jak możesz podać listę wszystkich ograniczeń klucza podstawowego z nazwą bazy danych, nazwą schematu, nazwą tabeli, nazwą kolumny, nazwą ograniczenia?

Rozwiązanie:

Będziemy używać widoków systemowych, aby uzyskać podstawowe informacje o ograniczeniu klucza. Ponieważ musimy uruchomić zapytanie na całej bazie danych, będziemy używać Cursora z dynamicznym sql. Dla każdej bazy danych wstawimy wyniki do tabeli tymczasowej i na koniec wybierzemy wynik z tabeli tymczasowej do wyświetlenia.

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



Wykonuję powyższe zapytanie na moim wystąpieniu SQL Server i otrzymałem listę wszystkich podstawowych ograniczeń klucza z nazwą bazy danych, nazwą schematu, nazwą tabeli, nazwą kolumny i nazwą ograniczenia, jak pokazano poniżej.
Jak uzyskać listę wszystkich ograniczeń klucza podstawowego z każdej bazy danych z wystąpienia programu SQL Server — SQL Server / Samouczek T-SQL
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Żądanie nie powiodło się ze stanem HTTP 401:Unauthorized IN SSRS

  2. Co to jest plik MDF?

  3. Jak sformatować datę i godzinę w SQL Server

  4. Pamiętaj o tym podczas formatowania typu danych TIME w SQL Server (T-SQL)

  5. Utwórz wieloetapowe zadanie agenta SQL Server (T-SQL)