Kamil Kliczbor @ asptip.net

17Jul/090

Dynamiczne usuwanie default constraint z tabeli

Dynamiczne usuwanie domyślnych wartości tabeli można zrealizować za pomocą poniższego kodu.

DECLARE @@cName NVARCHAR(100)
DECLARE @query NVARCHAR(100)
DECLARE @@counter INT

DECLARE DF_evoyage CURSOR SCROLL
FOR
SELECT NAME --, OBJECT_ID, PARENT_OBJECT_ID, TYPE, TYPE_DESC, PARENT_COLUMN_ID, DEFINITION
FROM SYS.DEFAULT_CONSTRAINTS
WHERE NAME LIKE '%_table_name_%'

OPEN DF_evoyage
FETCH FIRST FROM DF_table INTO @@cName

SET @@counter = 1

WHILE @@FETCH_STATUS = 0
BEGIN
SET @query = 'ALTER TABLE table_name DROP CONSTRAINT ' + @@cName;
PRINT CAST(CAST(@@counter AS NVARCHAR(10)) + ') EXECUTING ' + @query AS NVARCHAR(200))
EXEC sp_executesql @query
FETCH NEXT FROM DF_table INTO @@cName
SET @@counter = @@counter + 1
END

CLOSE DF_table
DEALLOCATE DF_table

Operacja przydaje się w przypadku kiedy np. trzeba dodać identity na kolumnie. Jedyna opcją jest wtedy (dajmy na to że operujemy na tabeli 'tab')
1. Usunięcie constraintów z tabeli tab
2. Utworzenie tabeli TMP_tab
3. Dodanie tych samych defaultów na tabeli TMP_tab
4. Skopiowanie danych z tabeli tab do tabeli TMP_tab
5. Usunięcie tabeli tab
6. Zmiana nazwy tabeli z TMP_tab na tab
7. Dodanie pozostałych constraintów do tabeli tab.

FINITO.

Comments (0) Trackbacks (0)

No comments yet.


Leave a comment

No trackbacks yet.