我目前正在使用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中将其删除之前,您是否知道如何成功检查用户定义的表类型是否存在?
谢谢!
答案 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
答案 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表类型之前检查表类型是否在任何存储过程中使用,否则会引发类似表类型具有依赖性的错误