Scenariusz:
Pracujesz jako programista SQL Server, masz bazę danych, która ma podstawowe ograniczenia klucza w prawie wszystkich tabelach. Musisz użyć tej bazy danych jako tymczasowej bazy danych dla procesu ETL. Naprawdę nie potrzebujesz już ograniczenia klucza podstawowego. Jak usunąłbyś wszystkie podstawowe ograniczenia klucza dla całej tabeli w bazie danych?Rozwiązanie:
Listę podstawowych ograniczeń klucza uzyskamy za pomocą widoków systemowych. Po uzyskaniu informacji użyjemy kursora, aby przejść przez listę ograniczeń klucza podstawowego i usunąć je za pomocą poniższego skryptu.Ogólny skrypt do usuwania ograniczenia klucza podstawowego to
Zmień nazwę schematu tabeli.
Oto nasz skrypt usuwający wszystkie ograniczenia klucza podstawowego z bazy danych
USE YourDatabaseName GO --Declare Variables DECLARE @DatabaseName AS VARCHAR(128) DECLARE @SchemaName AS VARCHAR(128) DECLARE @TableName AS VARCHAR(128) DECLARE @ColumnName AS VARCHAR(128) DECLARE @ConstraintName AS VARCHAr(128) DECLARE CUR CURSOR FOR --Get Primary Key Constraint Select TC.Table_Catalog as DatabaseName, TC.Table_Schema AS TableSchema, TC.Table_Name AS TableName, CCU.Column_Name AS ColumnName, TC.Constraint_Name AS ConstraintName From information_Schema.Table_Constraints TC INNER JOIN Information_Schema.constraint_column_usage CCU on TC.Constraint_Name=CCU.Constraint_Name and TC.Table_Name=CCU.Table_Name where Constraint_Type='PRIMARY KEY' OPEN Cur FETCH NEXT FROM Cur INTO @DatabaseName,@SchemaName,@TableName,@ColumnName, @ConstraintName WHILE @@FETCH_STATUS = 0 BEGIN --Build dynamic sql for each database DECLARE @SQL VARCHAR(MAX) = NULL SET @SQL ='Alter table [' SET @SQL+=@SchemaName+'].['+@TableName+']' SET @SQL+=' Drop Constraint [' SET @SQL+=@ConstraintName+']' PRINT @SQL EXEC (@SQL) FETCH NEXT FROM Cur INTO @DatabaseName,@SchemaName,@TableName,@ColumnName, @ConstraintName END CLOSE Cur DEALLOCATE Cur
Wykonałem powyższy skrypt na jednej z moich baz danych, wydrukowałem instrukcje alter dla upuszczenia ograniczenia klucza podstawowego dla wszystkich tabel w bazie danych i wykonałem.
Jak usunąć wszystkie ograniczenia klucza podstawowego dla bazy danych programu SQL Server — samouczek programu SQL Server