【发布时间】:2019-06-03 18:13:24
【问题描述】:
我被分配了一项任务来检查一个项目是如何变化的以及变成了哪些子产品。 我的逻辑是:我将使用一个函数来检查哪些子产品,我的资源已经变成并重新运行该函数,直到没有创建子产品。我想为我搜索过的每个子产品创建一个临时表(因此不会进入某种循环)和另一个临时表,我在其中插入从我的函数中搜索到的每个产品。该函数将使用第一个产品重复自身,并且在插入生成的产品后将删除最上面的产品(我的函数使用的那个,因此在表清空时有一个端点)。我被困住了,因为我找不到一种可行的方法来完成这项工作。这是我的代码片段。
我尝试插入不存在的地方,但无法正确插入。
declare @item NVARCHAR(250)
declare @return NVARCHAR(250)
declare @resultstable TABLE ( [order] NVARCHAR(50),[return] NVARCHAR(50),[genItem] NVARCHAR(50),[BatchNo] NVARCHAR(50),[IsItem] NVARCHAR(50))
declare @tempSearch TABLE ( [Exists] NVARCHAR(50))
SET @item = -- my searching item
INSERT INTO @resultstable
SELECT *
FROM [dbo].[fuction] (@item)
INSERT INTO @tempSearch
SELECT TOP (1) [BatchNo] FROM @RESULTSTABLE
WHILE( (SELECT COUNT(*) FROM @resultstable)>0)
BEGIN
SET @return = (SELECT TOP(1) [return] FROM @resultstable)
----here is my problem in the if statement
IF(@return=(SELECT [Exists] FROM @resultstable WHERE [EXISTS] = @return ))
BEGIN
INSERT INTO @tempSearch
SELECT TOP (1) [return] FROM @resultstable
INSERT INTO @resultstable
SELECT *
FROM [dbo].[function] (@return)
DELETE TOP(1) FROM @resultstable
END
ELSE
BEGIN
DELETE TOP (1) FROM @resultstable
END
END
由于 delete top 语句,第一个 Temp 表 @resultstable 中的预期输出应为 0。对于第二个表@tempSearch,我应该拥有按给定顺序搜索过的任何项目。大多数情况下,该函数使用的每个项目都会产生 3-6 个子产品。请记住,当我的函数产生 0 个结果(找不到任何生成的产品)时,该过程将停止。任何帮助将不胜感激,因为我没有太多的 SQL 经验。
【问题讨论】: