sql >> Database >  >> RDS >> Sqlserver

Hoe een lijst met tabellen te krijgen zonder primaire sleutelbeperking in alle databases van SQL Server-instantie - SQL Server / TSQL-zelfstudie, deel 62

Scenario:

Je werkt als SQL Server ontwikkelaar of SQL Server DBA. U moet de lijst met alle tabellen ophalen uit alle databases op de SQL Server-instantie die geen primaire sleutelbeperkingen hebben. Hoe zou je dat doen?


Oplossing:

We zullen systeemweergaven gebruiken om alle tabellen op te halen uit alle databases op SQL Server Instance die geen primaire sleutelbeperkingen hebben.
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
 
 Ik heb bovenstaande query uitgevoerd op mijn SQL Server-instantie en kreeg een lijst met tabellen van alle databases die geen primaire sleutelbeperkingen hebben.

Verkrijg alle tabellen van SQL Server Instance die geen Primary Key Constraint hebben - SQL Server / TSQL-zelfstudie
  1. Interviewvragen voor data-ingenieurs met Python

  2. Retourneer alle niet-berekende kolommen uit een tabel in SQL Server

  3. Hoe variabele declareren en gebruiken in hetzelfde Oracle SQL-script?

  4. Is er een functie in oracle die lijkt op group_concat in mysql?