2012-06-27 1 views
0

Я пытаюсь перенести Foxpro DB для SQL Server .. У меня есть сазе в Foxpro, который работает, как это ..Можно ли иметь несколько операторов выбора внутри сазе в SQL

CASE *variable* = 1 
    SELECT * FROM TABLEA INTO CURSOR A 
CASE *variable* = 2 
    SELECT * FROM TABLEB INTO CURSOR B 
CASE *variable* = 3 
    SELECT * FROM TABLEC INTO CURSOR C 

CASE *variable* = N 
    SELECT * FROM TABLEN INTO CURSOR N 

Есть ли способ конвертировать этот оператор CASE в SQL без использования IF? Я предполагаю, что в SQL Server CASE можно записать только в SELECT.

Спасибо ..

+0

Я полагаю, вы могли бы присоединиться все таблицы, такие как 'РЕГИСТРИРУЙТЕСЬ TABLEA ON вар = 1, РЕГИСТРИРУЙТЕСЬ TableB ON вар = 2' и т.д. Я бы не советовал делать это (отсюда комментарий, а не ответ), но он может дать некоторое вдохновение. – corsiKa

+2

В t-sql 'case' не предназначен для управления потоком; скорее, он используется для возврата одного значения, вам нужно будет использовать IF - может быть уместно для foxpro, но такой подход - в частности, курсоры - редко лучший способ делать что-то на сервере SQL –

+0

Почему вы не можете использовать 'IF'? Насколько я знаю, использовать CASE в SQL нельзя, потому что результат должен быть выражением, которое является однозначным. –

ответ

0

Это то, что вы спрашиваете:

SELECT * FROM IIF(var = 1, 'table1', IIF(var = 2, 'table2', 'table3')) INTO CURSOR IIF(var = 1, 'cur1', IIF(var = 2, 'cur2', 'cur3'))