Answers:
您可以查看sys.types或使用TYPE_ID:
IF TYPE_ID(N'MyType') IS NULL ...
只是预防措施:使用type_id不会验证类型是否为表类型-只是存在具有该名称的类型。否则,gbn的查询可能更好。
SELECT name FROM sys.objects WHERE type = 'TT'
                    IF EXISTS (SELECT * FROM sys.types WHERE is_table_type = 1 AND name = 'MyType')
    --stuff
sys.types ...它们不是架构范围的对象,因此不会出现在sys.objects中
更新,2013年3月
您可以使用TYPE_ID太
Schema_ID实际上,它是您链接到的sys.types表中的属性之一;这就是为什么可以将它们引用为[dbo]。[myUDType] )。不过,您是正确的,因为UD类型未在sys.objects中列出,因此OBJECT_ID()无法访问。(无论出于何种原因,sys.objects都不是架构范围内的对象的详尽列表。)
                    sys.objects直接列出,但是每一个都有一行
                    IF EXISTS(SELECT 1 FROM sys.types WHERE name = 'Person' AND is_table_type = 1 AND SCHEMA_ID('VAB') = schema_id)
DROP TYPE VAB.Person;
go
CREATE TYPE VAB.Person AS TABLE
(    PersonID               INT
    ,FirstName              VARCHAR(255)
    ,MiddleName             VARCHAR(255)
    ,LastName               VARCHAR(255)
    ,PreferredName          VARCHAR(255)
);
              您还可以使用系统table_types视图
IF EXISTS (SELECT *
           FROM   [sys].[table_types]
           WHERE  user_type_id = Type_id(N'[dbo].[UdTableType]'))
  BEGIN
      PRINT 'EXISTS'
  END 
              
IF OBJECT_ID(N'MyType', 'TT') IS NULL没有成功,但是您的解决方案有效。