2013-04-15 3 views
0

У меня есть следующий SQL, который возвращает несколько строк:несколько строк в одной переменной SQL

declare @blabla 
select id from table where @blabla = blabla and blabla is blabla 

он возвращает несколько записей, как показано ниже:

enter image description here

Теперь позже мою хранимую процедуру. Мне нужно получить результат этого запроса. поэтому у меня есть еще один такой вопрос:

select column from table where blabla IN (that 1st query) 

Таким образом, мое решение состояло в том, чтобы поставить первый запрос выше в переменной, а затем выполнить его. Так что я сделал вот так:

declare @query nvarchar(max) 
set @query= 
' 
declare @blabla 
select @body = id from table where @blabla = blabla and blabla is blabla 
' 

declare @result as nvarchar(max) 
exec sp_executesql @query, N'@body varchar(max) output', @body = @result output 


select column from table where blabla IN (@result) 

Но @result выше только вернул одну строку.

enter image description here

, которая является последней строкой, когда мой первый запрос выполняется.

Я хочу, чтобы мой @result содержал несколько идентификаторов, а не только последние. Как я могу это сделать? Что случилось с моим скриптом?

Любая помощь, которую вы могли бы предоставить, была бы весьма признательна.

Спасибо!

ответ

1

Проблема заключается в том, как вы присваиваете переменной @body здесь:

select @body = id 
from table 
where @blabla = blabla and blabla is blabla 

Это даст только @body значение последнего ID встречается (в зависимости от порядка результатов).

Для того, чтобы сделать то, что вы после того как вы можете использовать табличную переменную:

DECLARE @Result TABLE (ID INT); 
INSERT @Result (ID) 
SELECT ID 
FROM Table 
WHERE @Blabla = blabla; 


SELECT column 
FROM table 
WHERE ID IN (SELECT ID FROM @Result); 
0

Что вы ищете является таблица температуры.

SELECT id INTO #TEMP FROM table WHERE ... 

Вы можете пойти дальше и сделать

SELECT * FROM #TEMP 
Смежные вопросы