Scenario:
Du arbetar som SQL Server-utvecklare eller SQL Server DBA. Du måste få listan över alla tabeller från alla databaser på SQL Server-instansen som inte har primära nyckelbegränsningar. Hur skulle du göra det?Lösning:
Vi kommer att använda systemvyer för att hämta alla tabeller från alla databaser på SQL Server Instance som inte har primära nyckelbegränsningar.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 Jag körde ovanstående fråga på min SQL Server-instans och fick en lista över tabeller från alla databaser som inte har primära nyckelbegränsningar.

Hämta alla tabeller från SQL Server Instance som inte har Primary Key Constraint - SQL Server / Handledning för TSQL