首先,我创建了一个包含一列的内存表,并使用这些列值与另一个表进行了内部连接。这样做时,我收到此错误:
Must declare the scalar variable @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)
关于sql - 必须声明标量变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16168565/