sql >> Databáze >  >> RDS >> Sqlserver

Jak přidat omezení primárního klíče do sloupců identity do všech tabulek v databázi SQL Server - SQL Server / Výukový program TSQL, část 63

Scénář:

Pracujete jako vývojář SQL Serveru. Máte tento požadavek, ve kterém musíte vytvořit omezení primárního klíče pro všechny sloupce identity ve všech tabulkách v databázi SQL Server, pokud neexistuje.
Název primárního klíče by měl být Pk_SchemaName_TableName_ColumnName.

Řešení:

Nejprve musíme získat seznam tabulek, které mají sloupec identity a není na nich vytvořeno omezení primárního klíče. budeme používat systémové tabulky a systémové pohledy, abychom získali všechny tabulky se sloupci identity, které nemají omezení primárního klíče.
Potom použijeme kurzor s dynamickým SQL ke generování příkazu Alter pro tabulku, abychom přidali omezení primárního klíče a provedli skript.
POUŽÍVEJTE YourDatabaseNameGO--Declare VariablesDECLARE @DatabaseName AS VARCHAR(128 )DECLARE @SchemaName AS VARCHAR(128)DECLARE @TableName AS VARCHAR(128)DECLARE @ColumnName AS VARCHAR(128)DECLARE CUR CURSORFOR--Získejte seznam tabulek s Identity Column--on, které nemají primární klíč SELECT DB_Name ,Schema_Name(Schema_id) AS TableSchema ,OBJECT_NAME(c.OBJECT_ID) AS TableName ,c.NAME AS ColumnNameFROM sys.columns CINNER JOIN sys.tables t ON c.object_id =t.object_idWHERE' type'PTEXSELECTdesc1=.Table_Catalog AS DatabaseName ,TC.Table_Schema AS TableSchema ,TC.Table_Name AS TableName ,CCU.Column_Name AS Název sloupceFROM information_Schema.Table_Constraints TCINNER JOIN Information_Schema.constraint_column_usage CCU 
ON TC.Constraint_Name =CCU.Constraint_Name AND TC.Table_Name =CCU.Table_NameWHERE Constraint_Type ='PRIMARY KEY'OPEN CurFETCH NEXTFROM CurINTO @DatabaseName ,@SchemaName ,@CoTable_Name @SchemaName ,@CoTable_Name @SchemaName @sq --l_TableName @DatabaseName ,@Co. pro každou databázi DECLARE @SQL VARCHAR(MAX) =NULL SET @SQL ='Změnit tabulku [' + @SchemaName + '].[' + @TableName + ']' + CHAR(10) SET @SQL +='Přidat omezení [Pk_' + @SchemaName 
+ '_' + @TableName 
 + '_' + @ColumnName + '] ' SET @SQL +='Primární klíč ([' + @ColumnName + '])' EXEC (@SQL) PRINT @SQL FETCH NEXT FETCH NEXT FROM Cur INTO @DatabaseName ,@ SchemaName ,@TableName ,@ColumnNameENDCLOSE CurDEALLOCATE Cur
 
 
 
 
 Pokud chcete pouze generovat příkazy alter pro přidání omezení primárního klíče, můžete přidat komentář k části Exec(@SQL). Výše ​​uvedený skript vytiskne příkazy Alter a můžete jej spustit podle svého pohodlí.
Také pokud nechcete Pokud nechcete přidat část Schema name do omezení primárního klíče, můžete odstranit @SchemaName.
Provedl jsem výše uvedený dotaz a vytvořilo omezení primárního klíče ve sloupcích identity, kde chybělo. Upravte skripty generované skriptem a přidejte do sloupců identity omezení primárního klíče

Ověřil jsem tabulky a omezení primárního klíče byly úspěšně vytvořeny. Jak vytvořit omezení primárního klíče pro sloupce identity v databázi SQL Server
  1. Smyčka přes dimenzi pole v plpgsql

  2. Úplný seznam kolací podporovaných MariaDB

  3. Vypočítejte MD5 hash řetězce UTF8

  4. Připojování k MAX datovému záznamu ve skupině