Scenario:
Du arbetar med dokumentation av databasobjekt och du ombeds att tillhandahålla listan över alla primärnyckelrestriktioner på alla databastabeller på hela SQL Server-instansen. Hur skulle du tillhandahålla listan över alla primära nyckelbegränsningar med databasnamn, schemanamn, tabellnamn, kolumnnamn, begränsningsnamn?Lösning:
Vi kommer att använda systemvyer för att få information om primär nyckelbegränsning. Eftersom vi behöver köra frågan på hela databasen kommer vi att använda Cursor med dynamisk sql. För varje databas kommer vi att infoga resultaten i temptabellen och slutligen kommer vi att välja resultatet i slutet från temptabellen för visning.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
Jag kör ovanstående fråga på min SQL Server-instans och fick listan över alla primära nyckelbegränsningar med databasnamn, schemanamn, tabellnamn, kolumnnamn och begränsningsnamn som visas nedan.
Hur får du en lista över alla primära nyckelbegränsningar från varje databas från SQL Server Instance - SQL Server / T-SQL handledning