3

我正在阅读看起来很有趣的表值参数..但我想知道当我们在数据库中定义表类型时它会保存在哪里?它的范围是什么?以及如何修改该类型..假设我创建了一个表类型...

CREATE TYPE DeptType AS TABLE
(
DeptId INT, DeptName VARCHAR(30)
);

现在我以后如何获得 DeptType 的架构?在存储过程的情况下,它就像sp_helptext [ProcedureName]. 我该如何修改它?这种类型的范围是什么?

4

2 回答 2

2

它的范围是什么?

它属于一个模式,与表、视图、存储过程等一样。对于使用,它只能在其所在的同一数据库中使用。无法从另一个数据库(即使在同一个实例中)引用表类型,并且在不同数据库中相同声明的两个表类型是不可互换的。

我该如何修改该类型

不幸的是,你不能。SQL 命令的模式是 ifCREATE用于使对象存在,ALTER用于修改该对象(并DROP删除它)。通过查看ALTER语句,您会注意到没有ALTER TYPE.

你能做的最好的就是DROP类型和CREATE它的改变形式。不幸的是,要这样做,您必须先删除所有依赖对象,然后删除类型,然后创建它,然后重新创建所有依赖对象。

于 2013-09-03T06:13:33.263 回答
2

试试这个查询 -

SELECT * 
FROM sys.columns c
JOIN sys.table_types tt ON c.[object_id] = tt.type_table_object_id 
WHERE tt.name = 'DeptType'

SELECT * 
FROM sys.objects o
WHERE o.[type] = 'TT'
    AND o.name LIKE 'TT_DeptType%' 

如何修改 -

Database Explorer -> 
  <your db> -> 
    Programmability -> 
      Types -> 
        User-Defined Table Types -> DROP-CREATE script
于 2013-09-03T05:43:36.003 回答