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