2013-04-23 10 views
3

Сначала я создал таблицу в памяти с одним столбцом и используя эти значения столбца. У меня есть внутреннее соединение с другой таблицей. При этом я получаю эту ошибку:Должен объявить скалярную переменную

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 [email protected] 

CLOSE cur; 

DEALLOCATE cur; 

ответ

6

Вы должны использовать псевдоним при ссылке на таблицу в условии объединения

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) 
+0

Можете ли вы объяснить, почему я должен использовать alias.Item таблица не имеет столбца AccountID. так что слияние. – Kavitha

+0

Я уверен, что гуру SQL-сервера может стать лучшей причиной, поэтому я предположил, что это просто упрощение анализатора со стороны Microsoft. – Toby

+0

Спасибо за вашу помощь. Это разворачивается. – Kavitha

0

Не уверен, что вам нужно курсор или временную таблицу для этого, я думаю, что это делает примерно то же самое в одном запросе

SELECT UOM FROM Item 
INNER JOIN (
    SELECT DISTINCT ParentItem AccountID 
    from ItemBillOfMaterial 
) Temporary 
ON Item.ItemID=Temporary.AccountID 
0

Хотя ответы, вероятно, отлично, не лучше ли это сделать:
SELECT UOM FROM Item WHERE UOM.ItemID IN (SELECT DISTINCT ParentItem FROM ItemBillOfMaterial)
вместо того, чтобы выбрать курсор? Извлечение происходит очень медленно и на основе кода, добавленного выше задания, не кажется слишком сложным.
Извините, если я ошибаюсь, и вы просто упростили задачу сосредоточиться на проблеме, с которой вы сталкиваетесь.

+0

Спасибо за ваш ответ ... Я изучаю, как использовать курсор, используя этот запрос. – Kavitha

Смежные вопросы