Логика комбинации операторов вставки - PullRequest
2 голосов
/ 23 июня 2011

Хорошо, поэтому я использую C # для вставки информации в таблицу на сервере базы данных.Он создает команду SQL на основе набора операторов if, которые к ней добавляются.У меня проблема с получением инструкции, которая будет создана чисто.Я понимаю, что для объединения операторов вставки в SQL Server мы используем:

INSERT INTO myTable 
SELECT 'value1', 'value2'
UNION ALL
SELECT 'value3', 'value4'
UNION ALL 
SELECT
etc

Моя проблема состоит в том, чтобы упорядочить их так, чтобы оператор работал независимо от того, какие операторы он передает.Например,

function()
string sqltext = "INSERT INTO myTable"
if(cond1)
{ sqltext=sqltext + "SELECT 'v1', 'v2' UNION ALL" }
else if (cond2) {
sqltext = sqltext + "SELECT 'v3', 'v4' UNION ALL" }

В этом случае, если какое-либо условие возвращается само по себе, оператор не будет работать, потому что оператор закончится в UNION ALL.Я надеюсь это имеет смысл.Мысли?

Ответы [ 2 ]

6 голосов
/ 23 июня 2011

Составьте список из вариантов

string sqltext = "INSERT INTO myTable";

List<string> selectList = new List<string>();

и

if(cond1)
{
    selectList.Add("SELECT 'v1', 'v2' UNION ALL");
    ...

и, наконец,

string selectStatement = string.Join(" UNION ALL ", selectList.ToArray());
sqltext = sqltext + " " + selectStatement;
1 голос
/ 23 июня 2011

Удалите «UNION ALL» из sqltext после его генерации.

                if(sqltext .Trim().EndsWith("UNION ALL")) {
                    sqltext = sqltext.Remove(s.LastIndexOf("UNION ALL"));
                }

Кроме того, в качестве примечания я бы рекомендовал использовать StingBuilder вместо конкатенации строк с использованием +.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...