Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Abrufen einer Liste von Tabellen mit oder ohne Primärschlüsseleinschränkung in allen Datenbanken von SQL Server-Instanzen – SQL Server / TSQL-Lernprogramm Teil 61

Szenario:

Sie arbeiten als SQL Server Entwickler / SQL Server DBA für ein Versicherungsunternehmen. Sie erstellen Dokumentation für Datenbankobjekte. Sie müssen eine Liste aller Tabellen aus der gesamten Datenbank der SQL Server-Instanz ohne Primärschlüsseleinschränkungen abrufen.


Lösung:

Wir können Systemansichten verwenden, um Tabellen mit oder ohne Primärschlüsselbeschränkung aus jeder Datenbank aufzulisten. Da die Abfrage auf jeder Datenbank ausgeführt werden muss, um diese Informationen zu sammeln, müssen wir die Liste der Benutzerdatenbanken durchlaufen. Wir verwenden den Cursor, um alle Datenbanken auf der SQL Server-Instanz zu durchlaufen. Wir werden unser dynamisches SQL für jede Datenbank erstellen und die Ergebnisse in einer temporären Tabelle speichern und schließlich die Datensätze für die Anzeige auswählen Tabelle zum Speichern von ErgebnissenIF OBJECT_ID('tempdb..#Results') IS NOT NULL DROP TABLE #ResultsCREATE TABLE #Results ( ServerName VARCHAR(128) ,DatabaseName VARCHAR(128) ,SchemaName VARCHAR(128) ,TableName VARCHAR(128) ,ColumnName VARCHAR(128) ,ConstraintName VARCHAR(128) ,HasPrimaryKeyConstraint VARCHAR(10) )DECLARE CUR CURSORFORSELECT '[' + NAME + ']' AS DBNameFROM sys.databasesWHERE NAME NOT IN ( 'master' ,'tempdb' ,'model' , 'msdb') OPEN CurFETCH NEXTFROM CurINTO @DatabaseNameWHILE @@FETCH_STATUS =0BEGIN --Dynamisches SQL für jede Datenbank erstellen DECLARE @SQL VARCHAR(MAX) =NULL SET @SQL ='Einfügen in #Results Select @@ServerName, T.Table_Catalog as Datenbankname, T.Table_Schema AS TableSc hema, T.Table_Name AS TableName, CCU.Column_Name AS ColumnName, TC.Constraint_Name AS ConstraintName, Case When TC.Constraint_Name is not Null Then ''Yes'' Else ''No'' End as HasPrimaryKeyConstraintFrom' + @DatabaseName + '. information_schema.tables Tleft join ' + @DatabaseName + '.information_Schema.Table_Constraints TC on T.Table_Catalog=TC.Table_Catalog und T.Table_Schema=TC.Table_Schema und T.Table_Name=TC.Table_Name und TC.Constraint_Type=''PRIMARY KEY' ' left JOIN ' + @DatabaseName +
'.Information_Schema.constraint_column_usage CCU auf TC.Constraint_Name=CCU.Constraint_Name und TC.Table_Name=CCU.Table_Name und T.Table_Type=''BASE TABLE''' EXEC (@SQL) PRINT @SQL FETCH NEXT FROM Cur INTO @DatabaseNameENDCLOSE CurDEALLOCATE Cur – Alle Datensätze aus der temporären Tabelle auswählen SELECT *FROM #Results
 
 
 Ich führe die obige Abfrage auf meiner SQL Server-Instanz aus und hier ist eine Liste der Tabellen aus allen Datenbanken mit Primärschlüsseleinschränkung, falls verfügbar, ansonsten Null. So erhalten Sie alle Tabellen mit oder ohne Primärschlüsseleinschränkung in der gesamten Datenbank von der SQL Server-Instanz – SQL Server / TSQL-Tutorial