Mam typ tabeli zdefiniowany przez użytkownika. Chcę sprawdzić, czy istnieje przed edycją w patchu za pomocą OBJECT_ID(name, type)
funkcji.
Co type
z wyliczenia należy przekazać dla typów tabel zdefiniowanych przez użytkownika?
N'U'
jak dla tabeli zdefiniowanej przez użytkownika nie działa, tj IF OBJECT_ID(N'MyType', N'U') IS NOT NULL
sql
sql-server
sql-server-2008
tsql
user-defined-types
abatishchev
źródło
źródło
IF OBJECT_ID(N'MyType', 'TT') IS NULL
bez sukcesu, ale twoje rozwiązanie zadziałało.SELECT name FROM sys.objects WHERE type = 'TT'
sys.types ... nie są obiektami o zasięgu schematu, więc nie będą znajdować się w sys.objects
Aktualizacja, marzec 2013
Można użyć TYPE_ID zbyt
źródło
Schema_ID
w rzeczywistości jest to jeden z atrybutów w tabeli sys.types, do której utworzono łącze ; dlatego można się do nich odwoływać jako [dbo]. [MyUDType] ). Niemniej jednak masz rację, że typy UD nie są wymienione w sys.objects, a zatem nie są dostępne dla OBJECT_ID (). (Z jakiegoś powodu sys.objects nie jest wyczerpującą listą obiektów osys.objects
bezpośrednio, ale jest tam wiersz dla każdego z nichźródło
Poniższe przykłady działają w moim przypadku, proszę zauważyć, że "is_user_defined" NOT "is_table_type"
źródło
Możesz także użyć systemowego widoku table_types
źródło