加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

SQL Server使用架构无法正常工作创建用户定义的表类型

发布时间:2021-02-27 06:20:59 所属栏目:编程 来源:网络整理
导读:我正在行使以下语句在SQL Server 2008R2 / 2012上建设用户界说的表范例: CREATE TYPE [MySchemaName].[MyUserTableType] As Table ( [Id] varchar(20) NOT NULL ); 这按预期事变. 我尚有一个存储进程,它删除给定Schema的全部相干工具. 这是我的用户界说的表

我正在行使以下语句在SQL Server 2008R2 / 2012上建设用户界说的表范例:

CREATE TYPE [MySchemaName].[MyUserTableType] 
   As Table ( [Id] varchar(20) NOT NULL );

这按预期事变.

我尚有一个存储进程,它删除给定Schema的全部相干工具.
这是我的用户界说的表范例无法正常事变的处所.我在等候
那些范例是行使关联的模式建设的.

假如我实行删除架构,它会诉苦架构与我的用户界说表范例相干联.因此它不会被删除.

可是,假如我查询我的数据库中TYPE_TABLE的全部工具,它汇报我我的表范例不属于我的模式.它们属于模式’sys’

SELECT name,schema_id,type_desc 
FROM [TESTDB].SYS.OBJECTS 
WHERE type_desc = 'TYPE_TABLE';

SELECT * FROM sys.schemas;

知道为什么吗?

这是我输出的截图

办理要领

您应该查察sys.types或sys.table_types(它还会果真type_table_object_id),而不是在sys.objects中查找这些内容.
SELECT name,schema_id /*Will be the "test" schema id*/
FROM   sys.types
WHERE  is_table_type = 1
       AND name = 'MyUserTableType'

建设用户界说范例时,它会向sys.sysscalartypes添加一行,个中包括用户提供的模式和名称,以及sys.sysschobjs中的一行,并在sys模式中行使体系天生的名称.体系天生的名称是通过毗连工具ID的TT_ FriendlyName _ Hex版本建设的.

这两个实体通过sys.syssingleobjrefs彼此关联

/*This query only works via the DAC*/
SELECT so.id AS object_id,st.id AS user_type_id,*
FROM   sys.sysschobjs so
       JOIN sys.syssingleobjrefs sor
         ON sor.indepid = so.id
       JOIN sys.sysscalartypes st
         ON st.id = sor.depid
WHERE  st.name = 'MyUserTableType'

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读