我在选择时遇到问题,收到错误消息
消息 208,第 16 级,状态 1,第 18 行
无效的对象名称“列表”。
怎么了?
DECLARE @end datetime = getdate(),
@start datetime = CAST('01/01/2023' as datetime),
@counter INT,
@MaxId INT,
@name NVARCHAR(100);
WITH list as (
SELECT DISTINCT ROW_NUMBER() OVER( ORDER BY KodDokumentu) as id, KodDokumentu
FROM [dbo].[view_list]
WHERE IdMagazynu = 15 and IdStatusu >= 50 and DataZatw >= @start and DataZatw <= @end
GROUP BY KodDokumentu
)
SELECT @counter = min(id) , @MaxId = max(id)
FROM list
WHILE(@counter IS NOT NULL AND @counter <= @MaxId)
BEGIN
SELECT @name = KodDokumentu
FROM list WHERE id = @counter
PRINT CONVERT(VARCHAR,@counter) + '. kod dokumentu ' + @name
SET @counter = @counter + 1
END
我想用 CTE 开始循环。
PRINT
命令仅是示例。
您的 CTE 对应于以下内容
select
:
SELECT @counter = min(id) , @MaxId = max(id)
FROM list
除此之外它就不再存在了
SELECT
。 [list] 在任何后续查询中都不存在。
一个想法是放入#temp 表中,重新读取变量,然后继续使用相同的代码:
--stays the same
WITH list as (SELECT DISTINCT ROW_NUMBER() OVER( ORDER BY KodDokumentu) as id, KodDokumentu
FROM [dbo].[view_list]
where IdMagazynu = 15 and IdStatusu >= 50 and DataZatw >= @start and DataZatw <= @end
group by KodDokumentu)
-- change to select INTO
SELECT *
into #list
FROM list
--rerun variable assignments
SELECT @counter = min(id) , @MaxId = max(id)
FROM #list
-- the rest of the while loop stays the same
WHILE(@counter IS NOT NULL....