T-SQL DROP TYPE IF EXISTS

时间:2017-07-13 13:56:53

标签: sql-server tsql

我目前正在使用SQL Server 2014中的T-SQL脚本。

我需要删除用户定义的表类型,但仅在它存在的情况下,并在删除/删除类型后再次创建它。

我在网上做了一些研究并找到了一个解决方案,遗憾的是,这个解决方案根本不起作用。

我当前的脚本如下所示:

IF OBJECT_ID('MySchema.tProjectType', 'U') IS NOT NULL
        DROP TYPE [MySchema].[tProjectType];

CREATE TYPE [MySchema].[tProjectType] AS TABLE
    (
        Id INT
        , IsPrivate BIT
        , IsPublic BIT
    );

我的错误讯息:

  

“MySchema.tProjectType”类型已存在,或者您无权创建它。

在我可以在SQL Server 2014中将其删除之前,您是否知道如何成功检查用户定义的表类型是否存在?

谢谢!

3 个答案:

答案 0 :(得分:28)

请尝试此操作,使用 type_id 代替 object_id

IF type_id('[MySchema].[tProjectType]') IS NOT NULL
        DROP TYPE [MySchema].[tProjectType];


CREATE TYPE [MySchema].[tProjectType] AS TABLE
    (
        Id INT
        , IsPrivate BIT
        , IsPublic BIT
    );

答案 1 :(得分:1)

使用TYPE_ID

或查询sys.table_types

答案 2 :(得分:1)

试试这个

IF EXISTS (SELECT 1 FROM sys.types WHERE is_table_type = 1 AND name ='tProjectType') 
    Begin
         DROP TYPE [tProjectType];
         CREATE TYPE [tProjectType] AS TABLE
            (
                 Id INT
                , IsPrivate BIT
                , IsPublic BIT
            );
        END

在Droping表类型之前检查表类型是否在任何存储过程中使用,否则会引发类似表类型具有依赖性的错误