У вас есть 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