Сценарий:
Вие работите като разработчик на 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 урок