Mam ten sql:
ALTER TABLE dbo.ChannelPlayerSkins
DROP CONSTRAINT FK_ChannelPlayerSkins_Channels
ale najwyraźniej w niektórych innych bazach danych, których używamy, ograniczenie ma inną nazwę. Jak mogę sprawdzić, czy istnieje ograniczenie z nazwy FK_ChannelPlayerSkins_Channels
.
sql-server
information-schema
system-tables
Lieven Cardoen
źródło
źródło
Odpowiedzi:
Spróbuj tego:
-- EDYTOWAĆ --
Kiedy pierwotnie odpowiedziałem na to pytanie, myślałem o „kluczu obcym”, ponieważ pierwotne pytanie dotyczyło znalezienia „FK_ChannelPlayerSkins_Channels”. Od tego czasu wiele osób skomentowało znalezienie innych „ograniczeń”, oto kilka innych pytań w tym zakresie:
tutaj jest alternatywna metoda
Jeśli potrzebujesz jeszcze więcej informacji o ograniczeniach, zajrzyj do systemowej procedury przechowywanej,
master.sys.sp_helpconstraint
aby dowiedzieć się, jak uzyskać określone informacje. Aby wyświetlić kod źródłowy za pomocą SQL Server Management Studio, wejdź do „Object Explorer”. Stamtąd rozwijasz bazę danych „Master”, a następnie „Programowalność”, następnie „Procedury składowane”, a następnie „Procedury przechowywane w systemie”. Następnie możesz znaleźć „sys.sp_helpconstraint” i kliknąć go prawym przyciskiem myszy i wybrać „modyfikuj”. Tylko uważaj, aby nie zapisać żadnych zmian. Możesz także użyć tej systemowej procedury składowanej na dowolnej tabeli, używając jej w podobny sposóbEXEC sp_helpconstraint YourTableNameHere
.źródło
Najłatwiejszym sposobem sprawdzenia istnienia ograniczenia (a następnie zrobienia czegoś takiego jak upuszczenie go, jeśli istnieje) jest użycie funkcji OBJECT_ID () ...
OBJECT_ID może być używany bez drugiego parametru („C” tylko dla ograniczeń sprawdzania) i może to również działać, ale jeśli nazwa ograniczenia pasuje do nazwy innych obiektów w bazie danych, możesz otrzymać nieoczekiwane wyniki.
OBJECT_ID może być również używany z innymi „ograniczeniami”, takimi jak ograniczenia klucza obcego lub ograniczenia klucza podstawowego itp. Aby uzyskać najlepsze wyniki, zawsze należy podać odpowiedni typ obiektu jako drugi parametr funkcji OBJECT_ID:
Typy obiektów ograniczających:
Należy również pamiętać, że schemat jest często wymagany. Schemat ograniczeń ogólnie przyjmuje schemat tabeli nadrzędnej.
Brak umieszczenia ograniczeń (lub cokolwiek, co sprawdzasz) w nawiasach podczas korzystania z tej metody może również powodować fałszywe przeczenie - jeśli twój obiekt używa nietypowych znaków (takich jak a.), Nawiasy są wymagane.
źródło
OBJECTPROPERTY(OBJECT_ID('constraint_name'), 'IsConstraint') = 1
aby zachować zgodność z bieżącą wersją aż do SQL 2000. Niedbo
wymaga również schematu.Jeśli szukasz innego rodzaju ograniczenia, np. Domyślnego, powinieneś użyć innego zapytania (od Jak znaleźć domyślne ograniczenie za pomocą INFORMACJE_SCHEMA? Odpowiedź devio ). Posługiwać się:
znaleźć domyślne ograniczenie według nazwy.
W moim poście połączyłem różne warunki „JEŻELI nie istnieje”, aby umożliwić ponowne uruchomienie skryptów SQL „ DDL” JEŻELI nie istnieje ”
źródło
źródło
Czy patrzysz na coś takiego, poniżej jest testowany w SQL Server 2005
źródło
Tylko coś, na co trzeba uważać ......
W SQL Server 2008 R2 SSMS polecenie „Ograniczenie skryptu jako -> DROP I UTWÓRZ do” tworzy T-SQL jak poniżej
Po wyjęciu z pudełka ten skrypt NIE usuwa ograniczenia, ponieważ SELECT zwraca 0 wierszy. (patrz post Microsoft Connect ).
Nazwa domyślnego ograniczenia jest niepoprawna, ale uważam, że ma to również coś wspólnego z funkcją OBJECT_ID, ponieważ zmiana nazwy nie rozwiązuje problemu.
Aby to naprawić, usunąłem użycie OBJECT_ID i zamiast tego użyłem domyślnej nazwy ograniczenia.
źródło
OBJECT_ID(N'[YourSchema].[DEF_Detail_IsDeleted]')
jeśli masz 2 ograniczenia o tej samej nazwie w różnych schematach.Korzystam z następującego zapytania, aby sprawdzić istniejące ograniczenie przed jego utworzeniem.
To zapytanie o ograniczenie według nazwy kierowanej na nazwę tabeli. Mam nadzieję że to pomoże.
źródło
źródło
źródło
INFORMATION_SCHEMA
jest twoim przyjacielem. Ma wszelkiego rodzaju widoki, które pokazują wszystkie rodzaje informacji o schemacie. Sprawdź widoki systemu. Przekonasz się, że masz trzy poglądy na temat ograniczeń, jeden z nichCHECK_CONSTRAINTS
.źródło
Używam tego do sprawdzania i zdalnych ograniczeń w kolumnie. Powinien mieć wszystko, czego potrzebujesz.
źródło
źródło
Możesz użyć powyższego z jednym zastrzeżeniem:
Musisz użyć,
name = [Constraint name]
ponieważ tabela może zawierać wiele kluczy obcych i nadal nie może być sprawdzana pod kątem klucza obcegoźródło