Вставить запрос в цикл while в функцию - PullRequest
0 голосов
/ 25 апреля 2018

Мне нужно написать функцию SQL, которая должна возвращать временную таблицу с 2 столбцами. Но я хочу использовать цикл while. Я хочу вставить несколько запросов на вставку во временную таблицу. Но когда я использую запрос вставки в цикле while в функции SQL, он дает пустой результат. Вот мой случай.
Код примерно так:

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 голосов
/ 25 апреля 2018

У вас есть 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 ..., не имеющий никакого смысла.


EDIT:

Я рекомендую начать с простого кейса и создать его оттуда. Если это когда-нибудь перестанет работать, проблема в том, что вы когда-нибудь в последний раз меняли.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...