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

So erhalten Sie eine Liste der Tabellen ohne Primärschlüsseleinschränkung in allen Datenbanken der SQL Server-Instanz - SQL Server / TSQL-Tutorial Teil 62

Szenario:

Sie arbeiten als SQL Server Entwickler oder SQL Server DBA. Sie müssen die Liste aller Tabellen aus allen Datenbanken auf der SQL Server-Instanz abrufen, die keine Primärschlüsseleinschränkungen haben. Wie würden Sie das machen?


Lösung:

Wir werden Systemansichten verwenden, um alle Tabellen aus allen Datenbanken auf der SQL Server-Instanz abzurufen, die keine Primärschlüsselbeschränkungen haben.
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)
    )
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,
   Table_CataLog as DatabaseName,
   Table_Schema as TableSchema,
   Table_Name as TableName      
from
   '+@DatabaseName+'.information_schema.tables T     
where
   Not Exists(
      Select
         1 
      from
         '+@DatabaseName+'.information_Schema.Table_Constraints C     
      where
         Constraint_Type=''PRIMARY KEY''     
         and C.Table_Name=T.Table_Name     
         and C.Table_Schema=T.Table_Schema
   )     
   and Table_Type=''BASE TABLE'''
    EXEC (@SQL)
    --PRINT @SQL
    FETCH NEXT
    FROM Cur
    INTO @DatabaseName
END
CLOSE Cur
DEALLOCATE Cur
--Select all records from temp table 
SELECT *
FROM #Results
 
 Ich habe die obige Abfrage auf meiner SQL Server-Instanz ausgeführt und eine Liste der Tabellen aus allen Datenbanken erhalten, die keine Primärschlüsselbeschränkungen haben.

Alle Tabellen aus der SQL Server-Instanz abrufen, die keine Primärschlüsselbeschränkung haben - SQL Server / TSQL-Tutorial