используя значения переменных, где часть оператора Select - PullRequest
0 голосов
/ 16 августа 2011

Вот код:

declare
    @allcounterids varchar(max),
    @counteridquery varchar(max);

select
    @allcounterids = stuff((
    select 
            '],[' + cast([CounterId] as varchar(32))
        from
            AllCounters
        WHERE DateTime > '2011-08-15' and DateTime < '2011-08-19' and [Type] = 1
        for xml path('')), 1, 2, '') + ']';

Выберите утверждение

SELECT [Type], [DateTime], Value, AllCounters.CounterId
            FROM AllCounters
            WHERE CounterId IN @allcounterids

, как вы видите, я создал переменную '@allcounterids' и заполнил в ней данные, мой вопрося могу использовать эту переменную в предложении где Select?

Ответы [ 2 ]

2 голосов
/ 16 августа 2011

Нет, вы не можете иметь строку CSV и использовать ее с фильтром IN («предикат»). SQL не работает таким образом без динамического SQL: что в данном случае не требуется

Это можно сделать за один раз, таким образом

SELECT [Type], [DateTime], Value, AllCounters.CounterId
FROM AllCounters
WHERE CounterId IN
    (select [CounterId]
    from AllCounters
    WHERE DateTime > '2011-08-15' and DateTime < '2011-08-19' and [Type] = 1
    )

Но, говоря это, почему бы просто не сделать это?

SELECT [Type], [DateTime], Value, AllCounters.CounterId
FROM AllCounters
WHERE DateTime > '2011-08-15' and DateTime < '2011-08-19' and [Type] = 1

Если ваш вопрос не является неполным и не хватает информации ...

1 голос
/ 16 августа 2011

Я использовал это раньше (ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я использовал MS SQL Server, вы не указали СУБД), но он работает только в динамическом SQL. Создайте строку запроса, очистите все ваши входные данные и выполните exec.

...