sql - 必须声明标量变量

标签 sql sql-server-2008

首先,我创建了一个包含一列的内存表,并使用这些列值与另一个表进行了内部连接。这样做时,我收到此错误:

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/

相关文章:

SQL: JOIN 与 'near' 匹配

java - Hibernate - 在子表上没有 ID 的情况下,我应该在一对多关系中使用什么主键

mysql - SQL 仅选择列上具有最大值的行

Mysql查询,多个where条件,匹配哪个字段?

SQL 多个连接到同一个表,包括和排他

c# - 无法使用 nhibernate 插入到表中

sql - Postgres 字符串到数组并检查是否包含值

sql-server-2008 - SQL Server 2008 - 加入导致性能下降

sql - 每当将项目添加到 Service Broker 队列时,如何执行存储过程?

sql - 如何在 SQL Server 2008 的 T-SQL 中比较两个字符串是否包含相同的单词?