Сценарий:
Вие работите като разработчик на SQL Server или DBA на SQL Server. Трябва да получите списъка с всички таблици от всички бази данни на екземпляр на SQL Server, които нямат ограничения за първичен ключ. Как бихте направили това?Решение:
Ще използваме системни изгледи, за да получим всички таблици от всички бази данни на екземпляр на SQL Server, които нямат ограничения за първичен ключ.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 Изпълних горната заявка на моя екземпляр на SQL Server и получих списък с таблици от всички бази данни, които нямат ограничения за първичен ключ.

Вземете всички таблици от екземпляр на SQL Server, които нямат ограничение за първичен ключ - SQL Server / TSQL урок