需要帮助我创建的SQL user_defined函数。 我的函数应该根据我给出的项目编号返回项目的类型。 当我执行该函数时,我收到错误
“子查询返回的值超过1。当这个值不允许时 子查询跟随=,!=,<,< =,>,> =或当子查询用作 表达。“
我想我应该将此函数返回类型更改为表。但是我不知道怎么做。 这是我的功能:
create function [dbo].[fx_calculate_type](@item varchar)
returns varchar(10)
AS
begin
DECLARE @type VARCHAR(10)
,@typeCount int
,@MaxYear int
,@redoitem varchar(18)
set @type = ''
set @typeCount = (Select count(m.year)
from mr m
where m.item_no = 'RR301') --@item
set @MaxYear = (Select Max(m.year)
from mr m
where m.item_no = 'RR301') --@item
set @redoitem = (select redoitem
from mr m
where m.item_no = 'RR301') --@item
if (@redoitem is null or @redoitem= '')
BEGIN
While (@typeCount>=1)
Begin
Continue
If @typeCount = 1
Begin
set @type = 'N'
--return (@type )
End
Else
Begin
set @type = @typeCount+ 'C'
set @MaxYear =@MaxYear -1 --2014
set @typeCount = @typeCount -1 --4
-- return (@type)
END
END
END
Else
BEGIN
While (@typeCount>=1)
Begin
Continue
If @typeCount = 1
Begin
set @type = 'N'
--return (@type)
End
Else
Begin
set @type = @typeCount+ 'R'
set @MaxYear =@MaxYear -1 --2014
set @typeCount = @typeCount -1 --4
--return (@type)
END
END
END
return (@type)
END
我怎样才能让它发挥作用?
答案 0 :(得分:0)
这对我有用!感谢
创建proc [dbo]。[type]
@item varchar(10)
如
开始
DECLARE @type VARCHAR(10)
,@ typeCount int
,@ MaxYear int
,@ redoitem varchar(18)
设置@type ='' 设置@typeCount =(选择计数(DISTINCT m.year) 从先生 其中m.item_no = @item) - @ item
设置@MaxYear =(选择不同的最大值(m.year) 从先生 其中m.item_no = @item)
设置@redoitem =(选择前1个redoitem 从先生 其中m.item_no = @item)
IF(@redoitem为null或@ redoitem ='')BEGIN
WHILE(@ typeCount> = 1)BEGIN
IF @typeCount = 1
BEGIN
SET @type = 'N'
UPDATE mr SET type =@type WHERE item_no = @item AND year = @MaxYear
END
ELSE
BEGIN
set @type = CONVERT(VARCHAR(10),@typeCount)+ 'C'
UPDATE mr SET type =@type WHERE item_no = @item AND year = @MaxYear
SET @MaxYear =@MaxYear -1
END
SET @typeCount = @typeCount -1
CONTINUE
END
结束
Else BEGIN 虽然(@ typeCount> = 1)开始
如果@typeCount = 1 开始 设置@type ='N' UPDATE mr SET type = @ type WHERE item_no = @item AND year = @MaxYear 结束 其他 开始 设置@type = CONVERT(VARCHAR(10),@ typeCount)+'R' UPDATE mr SET type = @ type WHERE item_no = @item AND year = @MaxYear 设置@MaxYear = @ MaxYear -1 - 2014 设置@typeCount = @typeCount -1 - 4
END
CONTINUE
END
END 结束