这是我用户定义的表格类型......
CREATE TYPE [dbo].[FooType] AS TABLE(
[Bar] [INT],
)
Run Code Online (Sandbox Code Playgroud)
这是我在表值函数中必须要做的事情,以返回类型:
CREATE FUNCTION [dbo].[GetFoos]
RETURN @FooTypes TABLE ([Bar] [INT])
INSERT INTO @FooTypes (1)
RETURN
Run Code Online (Sandbox Code Playgroud)
基本上,我必须在函数的RETURN语句中重新声明我的类型定义.有没有办法我可以简单地在RETURN语句中声明类型?
我原以为这会起作用:
CREATE FUNCTION [dbo].[GetFoos]
RETURN @FooTypes [FooType]
INSERT INTO @FooTypes (1)
RETURN
Run Code Online (Sandbox Code Playgroud)
在MSDN/Google上找不到关于此的任何帮助....任何人?
编辑
我没有标记我的答案,并提出了这个问题 - 因为我在6个月后遇到了同样的情况.
有没有人知道是否可以从表值函数返回用户定义的表类型?如果没有,除了我所做的以外,还有更好的解决方法吗?(再次重新声明类型).
t-sql sql-server user-defined-functions user-defined-types sql-server-2008
实际上我在sql server 2008中创建了一个用户定义的表类型.结构如下.
我将它作为函数中的参数传递,该函数也返回该类型的表类型.我正面临这个问题,而我在函数中声明了该类型的变量,在其中插入了一些数据并返回该参数.
表类型结构是:
Create Type OfferWithSubscription as Table
(
OfferID int,
OfferUserID int,
OfferImage varchar(200),
OfferExactPrice Decimal(18,2),
OfferContent varchar(max),
OfferTitle varchar(100),
StartDate datetime,
EndDate datetime,
StartTime datetime,
StopTime datetime,
ShowToUser bit,
SubID int,
SubLevel varchar(100)
)
Run Code Online (Sandbox Code Playgroud)
功能,我想创建的是:
CREATE FUNCTION FN_ShowOffer
(
@Gold int,
@Silver int,
@Bronze int,
@table dbo.OfferWithSubscription Readonly )
RETURNS dbo.OfferWithSubscription
AS
BEGIN
DECLARE @ReturnTable AS dbo.OfferWithSubscription;
Declare @Case as varchar(20)
if(@Gold=0 and @Silver=1 and @Bronze=0 )
begin
set @Case='1S'
end
if(@Case='1S')
Begin
insert into @ReturnTable …Run Code Online (Sandbox Code Playgroud)