Scénář:
Pracujete jako vývojář SQL Server nebo SQL Server DBA. Potřebujete získat seznam všech tabulek ze všech databází na instanci SQL Serveru, které nemají omezení primárního klíče. Jak byste to udělali?Řešení:
K získání všech tabulek ze všech databází na instanci SQL Serveru, které nemají omezení primárního klíče, použijeme systémová zobrazení.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 Provedl jsem výše uvedený dotaz na instanci SQL Server a získal jsem seznam tabulek ze všech databází, které nemají omezení primárního klíče.

Získejte všechny tabulky z instance SQL Server, které nemají omezení primárního klíče - SQL Server / Výukový program TSQL