我正在阅读看起来很有趣的表值参数..但我想知道当我们在数据库中定义表类型时它会保存在哪里?它的范围是什么?以及如何修改该类型..假设我创建了一个表类型...
CREATE TYPE DeptType AS TABLE
(
DeptId INT, DeptName VARCHAR(30)
);
现在我以后如何获得 DeptType 的架构?在存储过程的情况下,它就像sp_helptext [ProcedureName]
. 我该如何修改它?这种类型的范围是什么?
我正在阅读看起来很有趣的表值参数..但我想知道当我们在数据库中定义表类型时它会保存在哪里?它的范围是什么?以及如何修改该类型..假设我创建了一个表类型...
CREATE TYPE DeptType AS TABLE
(
DeptId INT, DeptName VARCHAR(30)
);
现在我以后如何获得 DeptType 的架构?在存储过程的情况下,它就像sp_helptext [ProcedureName]
. 我该如何修改它?这种类型的范围是什么?
它的范围是什么?
它属于一个模式,与表、视图、存储过程等一样。对于使用,它只能在其所在的同一数据库中使用。无法从另一个数据库(即使在同一个实例中)引用表类型,并且在不同数据库中相同声明的两个表类型是不可互换的。
我该如何修改该类型
不幸的是,你不能。SQL 命令的模式是 ifCREATE
用于使对象存在,ALTER
用于修改该对象(并DROP
删除它)。通过查看ALTER
语句,您会注意到没有ALTER TYPE
.
你能做的最好的就是DROP
类型和CREATE
它的改变形式。不幸的是,要这样做,您必须先删除所有依赖对象,然后删除类型,然后创建它,然后重新创建所有依赖对象。
试试这个查询 -
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