Я использую ColdFusion для проекта, и у меня есть написанный запрос, который, я думаю, может быть быстрее с использованием хранимой процедуры, но я не человек 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, а затем вызвать другой запрос обратно в БД. Одна хранимая процедура делает все в БД, а затем возвращает исходный набор результатов запроса для использования.
Любые идеи?