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