Я использую ColdFusion for для проекта и у меня есть письменный запрос, который, я думаю, может быть быстрее с использованием хранимой процедуры, но я не специалист по T-SQL, поэтому я не уверен, как это сделать для сравнения.
Я выполняю начальный запрос, который выбирает несколько полей из таблицы на основе динамически созданного cfquery. Я думаю, что знаю, как преобразовать этот запрос в хранимую процедуру SQL Server.
Однако сразу после этого я беру все идентификаторы первичного ключа из этого запроса и запускаю другой запрос к отдельной таблице, которая «блокирует» записи с этими идентификаторами. Блокировка - это битовое поле (флаг) во второй таблице, которая сообщает системе, что эта запись «извлечена». Я завернул оба запроса в cftransaction
, чтобы они выполнялись как единое целое.
Обзор кода:
<cftransaction>
<cfquery name="selectQuery">
SELECT id, field2, field3
FROM table1
WHERE (bunch of conditions here)
</cfquery>
<cfquery name="updateQuery">
UPDATE table2
SET lockField = 1
WHERE table2.id IN (#ValueList(selectQuery.id#)
</cfquery>
</cftransaction>
Затем я возвращаю набор результатов selectQuery в мое приложение, которое использует его для вывода некоторых данных. Как бы я выполнил то же самое в одной хранимой процедуре SQL Server 2008, которую я мог бы вызвать с помощью cfstoredproc
?
Опять же, я думаю, что собственный способ CF (с cfquery
) не так эффективен, как хранимая процедура, поскольку мне нужно извлечь набор результатов обратно в CF, а затем вызвать другой запрос обратно в БД. Одна хранимая процедура делает все в БД, а затем возвращает исходный набор результатов запроса для использования.
Есть идеи?