Подтвердить что ты не робот

Можно ли использовать оператор Case в предложении sql From

Можно ли использовать оператор Case в выражении sql From с использованием SQL 2005? Например, я пытаюсь что-то вроде:

SELECT Md5 FROM 
CASE
    WHEN @ClientType = 'Employee' THEN @Source = 'HR'
    WHEN @ClientType = 'Member' THEN  @Source = 'Other'
END CASE 
WHERE Current = 2;
4b9b3361

Ответ 1

Предполагая SQL Server:

Вам нужно будет использовать динамический SQL. Создайте строку, а затем вызовите sp_executesql со строкой.

Изменить: еще лучше, просто используйте инструкции if для выполнения соответствующего оператора и присвойте значение переменной. Вам следует избегать динамического SQL, если это возможно.

Ответ 2

Я не считаю, что это возможно. Во-первых, оптимизаторы запросов принимают определенный список табличных вещей в предложении FROM.

Самое простое обходное решение, о котором я могу думать, будет UNION между двумя таблицами:

SELECT  md5
FROM    hr
WHERE   @clienttype = 'Employee'
AND     current = 2
UNION
SELECT  md5
FROM    other
WHERE   @clienttype = 'Member'
AND     current = 2;

Только одна половина UNION может быть True, учитывая предикат @clienttype.

Ответ 3

Нет, вы не можете выбрать таблицу для запроса с использованием оператора CASE. Операторы CASE только входят в выражения, например, для значения столбца или как часть выражения WHERE.

Это должно сделать это, если вы ищете только одно значение:

IF @ClientType = 'Employee' BEGIN
    SET @Source = (SELECT Md5 FROM HR WHERE Current = 2)
END
ELSE IF @ClientType = 'Member' BEGIN
    SET @Source = (SELECT Md5 FROM Other WHERE Current = 2)
END

Ответ 4

Поскольку вы не укажете, с каким SQL-сервером вы столкнетесь, это будет трудно правильно ответить....

Насколько я могу судить, вы не сможете это сделать ни с MS SQL Server, ни с Interbase/Firebird. Я не могу говорить для других серверных серверов, хотя...

Марк

Ответ 5

Я думаю, что это довольно безопасно сказать, что ответ - это не так. И это независимо от диалекта SQL.