Можно ли использовать оператор 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;
Ответы
Ответ 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.