Передача параметров SQL CE - PullRequest
1 голос
/ 25 октября 2011

У меня есть несколько запросов, которые проверяют запись в таблице, и если такой записи нет, она добавляется. В этом процессе участвуют 2 запроса:

1) select id from table where <conditions>

если есть какие-либо идентификаторы, соответствующие я ничего не делаю (или обновлять записи с идентификаторами, как я хочу), если нет идентификаторов, я выполняю второй запрос:

2) insert into table(<columns>) values(<values>)

Конечно, <conditions>, <columns> и <values> являются правильными строками для их контекста. Я хочу объединить эти 2 запроса в один:

insert into table(<values>) select <parameter list> where not exists(select id from table where <conditions>)

Таким образом, будет задействован только один запрос вместо 2. Пример этого запроса:

insert into persons(name) select @Name where not exists (select id from persons where name = @Name)

Проблема в том, что я использую параметры для запросов, и когда я выполняю этот составной запрос, я получаю исключение, говорящее «Параметр не разрешен в этом месте. Убедитесь, что знак« @ »находится в допустимом месте или что действительно в этом утверждении SQL. " Есть ли способ обойти параметры и не получить исключение для этого запроса? Я использую классы, связанные с C # и SqlCe.

1 Ответ

0 голосов
/ 25 октября 2011

В чем преимущество объединения запросов в композит? Если запрос поддерживается (и я на самом деле сомневаюсь, что синтаксический анализатор SQL Compact Query Parser это поддерживает), то движку sql все равно придется по сути выполнять оба запроса. Я нахожу два отдельных запроса более читабельными.

Как отдельные запросы, я также готов поспорить, что вы все равно сможете сделать его значительно быстрее, чем составной запрос, используя TableDirect. Посмотрите на ответ на этот вопрос и сравните его в своем приложении. Вероятно, он в 10 раз быстрее, чем ваша существующая пара запросов, поскольку он полностью исключает анализатор запросов.

...