我正在使用SQL Server,并有如下所示的表和类型.
CREATE TABLE Foo (
Id BIGINT,
Age INT,
DateCreated DATETIME2
);
CREATE TYPE FooRow AS TABLE (
Id BIGINT,
Age INT,
DateCreated DATETIME2
);
我在存储过程中使用FooRow
类型作为返回类型,在这种类型中,我从Foo
表中查询一些记录,将它们存储在一个FooRow
变量中,对它们执行其他一些操作,最后输出FooRow
变量。
是否有一种方法可以减少Foo
表模式的重复类型以创建FooRow
类型?
是否可以将存储过程变量的类型表示为现有的表或其他什么?
DECLARE @foorows TABLE Foo
如果没有,是否可以创建一个类型,比如FooRow
,只需要说“使用来自Foo
的列”?
发布于 2018-05-10 21:20:26
可以将表变量声明为特定的表类型,但必须使用created语句创建此类型(不能是另一个现有表)。但是,您可以为现有表的定义编写脚本(使用SSMS),并且只需手动更改第一行。
还可以定义表值函数以返回特定的表类型。表值函数(相对于存储过程)的优点是可以从查询(甚至从视图)调用表值函数。尽管表值函数所能做的事情还有额外的限制(主要是,它不能修改驻留在函数之外的任何数据),但是您应该考虑使用它们而不是嵌套存储过程(换句话说,当存储过程的结果必须在另一个过程中进一步处理时)。
https://stackoverflow.com/questions/50283498
复制