T-SQL DROP TYPE IF EXISTS

Tim*_*ton 13 t-sql sql-server

我目前正在使用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
    );
Run Code Online (Sandbox Code Playgroud)

我的错误信息:

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

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

谢谢!

小智 34

请尝试这个,使用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
    );
Run Code Online (Sandbox Code Playgroud)

  • 从SQL Server 2016 SP1开始,您现在可以根据本文的描述直接使用DROP TYPE IF EXISTS ...根据本文https://docs.microsoft.com/zh-cn/sql/t-sql/statements/drop-type-transact- sql?view = sql-server-2017 (2认同)