2010-07-14 3 views
1

Я уверен, что это обсуждается где-то, но после поиска какое-то время я не могу его найти.Результаты запроса в SP

Я строю хранимую процедуру для SQL 2000, и мне нужно создать список чисел, которые я могу использовать в функции IN.

Запрос выглядит следующим образом

SELECT DISTINCT type FROM dbo.table WHERE building = @currentBuilding 

Это возвращение, как правило, между 1-5 результатами, я ищу способ, чтобы положить, что в NVARCHAR или что-то.

Я хотел бы мечтать, что есть простой способ сделать это, так как он находится в 1 колонке, но у меня есть чувство, что я закончу повторение результатов.

В качестве стороны, является nvarchar правой переменной для использования? есть ли лучший способ сохранить эти файлы, чтобы сделать работу IN быстрее?

Спасибо!

+1

я считать, что есть какая-то причина, что вы не можете просто поместите запрос непосредственно в предложение 'IN'? –

+0

@Martin Smith: Я мог бы просто поместить его в предложение IN, но я должен использовать его много раз, поэтому я решил, что на сервере будет проще, если я сохраню его как переменную. – Shaded

+0

Не обязательно. Это зависит от того, насколько дорого он рассчитан. Удалив запрос из исходного контекста, вы можете лишить оптимизатора запросов некоторых оптимизационных возможностей в зависимости от того, как вы его используете. Я полагаю, что вам нужно использовать динамический SQL или функцию split для использования этого? Если поэтому одна переменная таблицы столбцов с «PRIMARY KEY» в столбце «тип» может быть лучше, если вам не нужно передавать список вокруг разных процедур. –

ответ

1

попробовать что-то вроде:

declare @All nvarchar(1000) 
SET @All=null 

SELECT 
    @All=ISNULL(@All+', ','')+CONVERT(varchar(10),d.value) 
    FROM (SELECT 1 AS Value UNION SELECT 22 UNION SELECT 333 UNION SELECT 4444) d 

PRINT @All 

ВЫВОД:

1, 22, 333, 4444 

это то, что вы можете использовать:

SELECT 
    @All=ISNULL(@All+', ','')+CONVERT(varchar(10),d.type) 
    FROM (SELECT DISTINCT type 
       FROM dbo.table 
       WHERE building = @currentBuilding 
     ) d 
+0

@KM: Работает как очарование! Большое спасибо! – Shaded

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