我需要编写一个应该返回2列临时表的SQL函数。但我想使用while
循环。我想向临时表插入多个插入查询。
但是当我在SQL函数中使用while循环中的insert查询时,它给出了空结果。以下是我的情况
代码如下:
create function dbo.fn_GetSubTree1(@type as Varchar(50))
returns @tree table
(sizename Varchar(9) not null,shiptotal int)
as
BEGIN
Declare @maxsize int;
Declare @counter int=0;
WHILE @counter < 24
BEGIN
insert into @tree(sizename,shiptotal) select s.size,s.shp from style st join scale s on st.scale=s.scale and s.nrfkey='' and s.prepak=''
SET @counter = @counter + 1;
END
return
End
答案 0 :(得分:0)
您有WHILE @counter < 24
,但从不将计数器初始化为任何值。
行DECLARE @counter INT;
不会将变量初始化为0
,而是将其初始化为NULL
。这意味着您的第一个循环是检查NULL < 24
,而不是TRUE
。
试试这个......
Declare @counter int = 0;
...
WHILE @counter < 24
BEGIN
...
SET @counter = @counter + 1;
END
您似乎还有其他问题,例如select ' + @Size + ','+@Shp + ' from ...
没有明显意义。
<强> 编辑: 强>
我建议从简单的案例工作开始,然后从那里构建它。如果它停止工作,问题就是你上次改变的问题。
CREATE FUNCTION dbo.fn_GetSubTree1(
@type AS NVARCHAR(50)
)
RETURNS @tree TABLE (
sizename NVARCHAR(9) NOT NULL,
shiptotal INT
)
AS
BEGIN
DECLARE @counter INT = 0;
WHILE (@counter < 24)
BEGIN
INSERT INTO
@tree(
sizename,
shiptotal
)
VALUES (
'Test',
@counter
)
SET @counter = @counter + 1;
END
RETURN
END