在函数中的while循环中插入查询

时间:2018-04-25 10:33:54

标签: sql sql-server tsql

我需要编写一个应该返回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

1 个答案:

答案 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