Сценарий:
Работите върху документация на обекти на база данни и от вас се иска да предоставите списък с всички ограничения на първичния ключ за всички таблици на базата данни на целия екземпляр на SQL Server. Как бихте предоставили списъка с всички ограничения на първичния ключ с име на база данни, име на схема, име на таблица, име на колона, име на ограничение?Решение:
Ще използваме системни изгледи, за да получим информацията за ограничение на първичния ключ. Тъй като трябва да изпълним заявката за цялата база данни, ще използваме Cursor с динамичен sql. За всяка база данни ще вмъкнем резултатите във временна таблица и накрая ще изберем резултата в края от временната таблица за показване.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
Изпълнявам горната заявка на моя екземпляр на SQL Server и получавам списъка с всички ограничения на първичния ключ с име на база данни, име на схема, име на таблица, име на колона и име на ограничение, както е показано по-долу.
![](http://www.sqldat.com/article/uploadfiles/202205/2022051109475661.png)
Как да получите списък с всички ограничения на първичния ключ от всяка база данни от екземпляр на SQL Server - SQL Server / T-SQL урок