我承担了一项任务,以检查某项商品的更改方式以及子产品的种类。 我的逻辑是:我将使用一个函数来检查哪些子产品,我的资源已转化为该资源,然后重新运行该功能,直到没有创建子产品为止。我想为我搜索过的每个子产品都有一个临时表(这样就不会陷入某种循环),而另一个临时表中我要插入从函数中搜索到的每个产品。该函数将使用第一个乘积进行重复,并在插入生成的乘积后删除最上面的乘积(我的函数使用的乘积,因此在清空表时会有一个终点)。我被困住了,因为我找不到使这项工作可行的方法。这是我的代码的一部分。
我试图插入到不存在的位置,但无法正确插入。
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方面没有很多经验。
答案 0 :(得分:1)
确定要使用MySql吗?该语法似乎更像sql-server。如果是sqlserver。 请删除mysql标记并添加sql-server标记。然后,关于您的问题,我认为您必须将IF条件更改为此:
IF(NOT EXISTS(SELECT TOP 1 [EXISTS] FROM @tempSearch WHERE [EXISTS] = @return ))
如果您的tempsearch表上不存在新的退货项目,请继续执行所需的操作。
也不确定为什么要这样做:
INSERT INTO @tempSearch
SELECT TOP (1) [BatchNo] FROM @RESULTSTABLE