首先,我已经创建了一个在内存中的表与一列,并利用这些列值我有一个内连接与另一个表。 这样做虽然我得到这个错误:
必须声明标量变量@Temporary。
任何一个可以解释我要去的地方错了吗?
DECLARE @ID INT
Declare @Temporary Table
(
AccountID INT
)
DECLARE cur CURSOR FOR
SELECT DISTINCT ParentItem from ItemBillOfMaterial
OPEN cur
FETCH NEXT FROM cur INTO @ID;
WHILE @@FETCH_STATUS = 0
BEGIN
Insert into @Temporary Values(@ID)
FETCH NEXT FROM cur INTO @ID;
END
SELECT UOM FROM Item
INNER JOIN @Temporary
ON Item.ItemID=@Temporary.AccountID
CLOSE cur;
DEALLOCATE cur;
你必须使用别名在连接条件引用表时
SELECT UOM FROM Item
INNER JOIN @Temporary t
ON Item.ItemID=t.AccountID
虽然能解决您遇到的问题,你不需要临时表,或光标。 这种查询可以被改写为:
SELECT UOM
FROM Item
WHERE ItemID IN (SELECT DISTINCT ParentItem FROM ItemBillOfMaterial)
不知道,你需要使用游标或为一个临时表,我觉得这确实差不多在一个查询
SELECT UOM FROM Item
INNER JOIN (
SELECT DISTINCT ParentItem AccountID
from ItemBillOfMaterial
) Temporary
ON Item.ItemID=Temporary.AccountID
虽然答案很可能是罚款,岂不是更好地这样做:
SELECT UOM FROM Item WHERE UOM.ItemID IN (SELECT DISTINCT ParentItem FROM ItemBillOfMaterial)
而不是光标获取? 取速度很慢,并根据您的工作上面添加的代码似乎并没有太复杂了。
很抱歉,如果我错了这里,你只是简化专注于你所面临的问题的任务。