2016-11-02 6 views
1

В настоящее время я динамически создаю SQL-запрос, в зависимости от результата другого запроса, который выполняется незадолго до этого.Объединить 2 запроса в 1

первый запрос:

SELECT col1, col2, col3, col4, col5, col6 
FROM tab1 

второй динамически построен запрос:

string query = "Update tab2 SET"; 

if (!Row.col1_IsNull) 
{ 
    query = query + " anotherCol1 = " + "'" + Row.col1 + "'" + ", "; 
} 
if (!Row.col2_IsNull) 
{ 
    query = query + " anotherCol2 = " + "'" + Row.col2 + "'" + ", "; 
} 
else 
{ 
    query = query + " comment = " + "'" + "some text..." + "'" + ", "; 
} 

query = query + " WHERE ("; 

if (!Row.col3_IsNull) 
{ 
    query = query + " anotherCol3 " + Row.col4 + "'" + Row.col5 + "' AND"; 
} 
if (!Row.col6_IsNull) 
{ 
    if (Row.col6 == "empty") 
    { 
     query = query + " col6 is null AND"; 
    } 
    else if (Row.col6 == "not empty") 
    { 
     query = query + " col6 is not null AND"; 
    } 
} 
//[...] 

Теперь я думал, было возможно ли объединить оба запроса в один запрос.

Есть ли что-то вроде if-утверждения, которое я могу использовать?

Update:

Возможный окончательный запрос может выглядеть следующим образом:

Update tab2 set 
    anotherCol1 = 'abc', 
    anotherCol2 = 'def', 
WHERE 
    (col3 = 'test') 
+0

Вы можете добавить окончательный запрос на обновление? –

+2

Это то, что я называю кодом спагетти. Удалите все и станьте от попрошайничества с ясным представлением о том, чего вы хотите. Использовать параметры не добавлять вручную значения в запрос. ИСПОЛЬЗОВАНИЕ stringBuilder также является хорошей идеей, как сказал AntDc. – mybirthname

+0

Если вы должны создать такой запрос, пожалуйста, используйте StringBuilder – AntDC

ответ

2

Использование UPDATE из JOIN синтаксиса.

UPDATE t2 
SET t2.anotherCol1 = COALESCE(t1.Col1,t2.anotherCol1), 
     t2.anotherCol2 = COALESCE(t1.Col2,t2.anotherCol2) 
FROM tab2 t2 
     INNER JOIN tab1 t1 
       ON t1.col3 = t2.col3 

Это всего лишь пример, который вы, возможно, придется изменить использование столбцов в наборе & Если пункт, основанный на вашем требовании

+0

OP только хочет, чтобы столбцы t2.anotherColx были установлены, если соответствующий t1.Colx не является нулевым, поэтому вам может понадобиться что-то вроде SET t2.anotherCol1 = COALESCE (t1.Col1, t2.anotherCol1) – PaulF

+0

@PaulF - I Не понимаю, что написано в коде 'C#'. Основываясь на примере запроса на обновление 'OP', я добавил пример. OP, возможно, придется внести некоторые изменения. Идея здесь использует * UPDATE из JOIN * синтаксиса –

+0

В коде C# он добавляет только столбцы, которые необходимо обновить, если соответствующий столбец в первом запросе не равен null, поэтому, если t1.Col1 был нулевым, установите t2. anotherCol1 не появится в последнем запросе - мое обновление вашего решения всегда будет устанавливать t2.anotherCol1 - либо в t1.Col1, если оно не равно null, иначе оно установит его в исходное значение. – PaulF

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