我目前正在使用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中删除之前,您知道如何成功检查用户定义的表类型是否存在吗?
谢谢!
我正在使用以下语句在SQL Server 2008R2/2012上创建用户定义的表类型:
CREATE TYPE [MySchemaName].[MyUserTableType]
As Table ( [Id] varchar(20) NOT NULL );
Run Code Online (Sandbox Code Playgroud)
这按预期工作.
我还有一个存储过程,它删除给定Schema的所有关联对象.这是我的用户定义的表类型无法正常工作的地方.我希望这些类型是使用关联的模式创建的.
如果我尝试删除架构,它会抱怨架构与我的用户定义表类型相关联.因此不会被删除.
但是,如果我查询我的数据库中TYPE_TABLE的所有对象,它告诉我我的表类型不属于我的模式.它们属于模式'sys'
SELECT name, schema_id, type_desc
FROM [TESTDB].SYS.OBJECTS
WHERE type_desc = 'TYPE_TABLE';
SELECT * FROM sys.schemas;
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?
这是我输出的截图
