Jak usunąć kolumnę, która ma ograniczenie domyślne w programie SQL Server 2008?
Moje pytanie brzmi
alter table tbloffers
drop column checkin
Otrzymuję poniżej błąd
Zameldowanie ALTER TABLE DROP COLUMN nie powiodło się, ponieważ co najmniej jeden obiekt uzyskuje dostęp do tej kolumny.
Czy ktoś może poprawić moje zapytanie, aby usunąć kolumnę z ograniczeniem?
sql-server
sql-server-2008
Robin Michael Poothurai
źródło
źródło
Odpowiedzi:
Najpierw upuść problematyczną
DEFAULT constraint
, po czym możesz upuścić kolumnęAle błąd może wynikać z innych powodów - na przykład funkcji zdefiniowanej przez użytkownika lub widoku z
SCHEMABINDING
ustawioną dla nich opcją.UPD: Całkowicie zautomatyzowany skrypt usuwania ograniczeń:
źródło
Oto inny sposób na usunięcie domyślnego ograniczenia o nieznanej nazwie bez konieczności uruchamiania oddzielnego zapytania w celu uzyskania nazwy ograniczenia:
źródło
Możesz również upuścić kolumnę i jej ograniczenia w pojedynczej instrukcji, a nie pojedynczo.
Poniżej znajduje się kilka dynamicznych instrukcji SQL, które wyszukają nazwy zależnych ograniczeń sprawdzających i domyślnych ograniczeń i usuwają je wraz z kolumną
(ale nie inne możliwe zależności kolumn, takie jak klucze obce, ograniczenia unikalności i klucza podstawowego, kolumny obliczane, indeksy)
źródło
DROP CONSTRAINT
zobaczyć gramatykę. Jeśli nie nazwiesz ograniczeń jawnie, będziesz musiał sprawdzić nazwę wygenerowaną przez SQL Server, np. Zgodnie z odpowiedzią marca. Ale gdy się o tym dowiesz, nadal możesz jednocześnie usunąć ograniczenie i kolumnę.Znajdź domyślne ograniczenie z tym zapytaniem tutaj:
W ten sposób otrzymasz nazwę domyślnego ograniczenia, a także nazwę tabeli i kolumny.
Gdy masz te informacje, musisz najpierw usunąć domyślne ograniczenie:
a następnie możesz upuścić kolumnę
źródło
ALTER TABLE table DROP CONSTRAINT DF_XY DROP COLUMN XY
Niestety składnia tego stwierdzenia jest nieprawidłowaDROP
poleceniami, aby to zadziałałoPoniższe rozwiązania działały dla mnie w odniesieniu do zaplecza SQL Azure (przy użyciu SQL Server Management Studio), więc YMMV, ale jeśli działa dla Ciebie, jest to znacznie prostsze niż inne rozwiązania.
źródło
Mam to samo:
ALTER TABLE DROP COLUMN nie powiodło się, ponieważ co najmniej jeden obiekt uzyskuje dostęp do tego komunikatu kolumny .
Moja kolumna miała indeks, który należało najpierw usunąć. Użycie sys.indexes załatwiło sprawę :
źródło
Zaktualizowałem trochę skrypt do mojej wersji serwera SQL
źródło
Nie zawsze jest to tylko domyślne ograniczenie, które zapobiega upuszczeniu kolumny, a czasami indeksy mogą również blokować usunięcie ograniczenia. Napisałem więc procedurę, która porzuca indeks lub ograniczenie w kolumnie, a na końcu samą kolumnę.
źródło