W programie Microsoft SQL Server znam zapytanie, aby sprawdzić, czy istnieje domyślne ograniczenie dla kolumny i usunąć domyślne ograniczenie:
IF EXISTS(SELECT * FROM sysconstraints
WHERE id=OBJECT_ID('SomeTable')
AND COL_NAME(id,colid)='ColName'
AND OBJECTPROPERTY(constid, 'IsDefaultCnst')=1)
ALTER TABLE SomeTable DROP CONSTRAINT DF_SomeTable_ColName
Ale ze względu na literówkę w poprzednich wersjach bazy danych nazwa ograniczenia może być DF_SomeTable_ColName
lub DF_SmoeTable_ColName
.
Jak mogę usunąć domyślne ograniczenie bez błędów SQL? Domyślne nazwy wiązań nie pojawiają się w tabeli INFORMACJE_SCHEMA, co sprawia, że sprawy stają się nieco trudniejsze.
Tak więc coś w stylu „usuń domyślne ograniczenie w tej tabeli / kolumnie” lub „usuń DF_SmoeTable_ColName
”, ale nie podawaj żadnych błędów, jeśli nie można go znaleźć.
sql
sql-server
tsql
Robo
źródło
źródło
Odpowiedzi:
Rozwijając kod Mitch Wheat, poniższy skrypt wygeneruje polecenie usunięcia ograniczenia i jego dynamiczne wykonanie.
źródło
Pomocny może być blog Roba Farleya:
Coś jak:
źródło
Przekonałem się, że to działa i nie używa żadnych złączeń:
Upewnij się, że kolumnaNazwa nie ma nawiasów, ponieważ zapytanie szuka dokładnego dopasowania i nic nie zwróci, jeśli jest to [kolumnaNazwa].
źródło
IF @ObjectName IS NOT NULL
polecenie EXEC[default_object_id])
wynosi 0 . Dostaję wartość NULL .Aby usunąć ograniczenie dla wielu kolumn:
źródło
Rozbudowane rozwiązanie (uwzględnia schemat tabeli):
źródło
Porzuć wszystkie domyślne ograniczenia w bazie danych - bezpieczny dla progu nvarchar (max).
źródło
Uruchom to polecenie, aby przejrzeć wszystkie ograniczenia:
Będzie to wyglądać mniej więcej tak:
DF__Mytable__Column__[ABC123]
. Następnie możesz po prostu usunąć ograniczenie.źródło
exec sp_helpconstraint 'Roles2016.UsersCRM'
Mam nadzieję, że może to być pomocne dla kogo ma podobny problem. W
ObjectExplorer
oknie wybierz bazę danych => Tabele, => Twoja tabela => Ograniczenia. Jeśli klient jest zdefiniowany podczas tworzenia czasu kolumny, możesz zobaczyć domyślną nazwę ograniczenia, w tym nazwę kolumny. następnie użyj:(nazwa ograniczenia jest tylko przykładem)
źródło
Poniższe rozwiązanie usunie określone domyślne ograniczenie kolumny z tabeli
źródło
Miałem kilka kolumn, które utworzyły wiele domyślnych ograniczeń, dlatego tworzę następującą procedurę składowaną:
źródło
Przydatne w przypadku niektórych kolumn, w których utworzono wiele
default constraints or check constraints
:Zmodyfikowano skrypt https://stackoverflow.com/a/16359095/206730
źródło
Zawsze generuj skrypt i sprawdzaj przed uruchomieniem. Poniżej skryptu
źródło
źródło
Spójrz.
źródło