프로젝트 용으로 ColdFusion을 사용하고 있으며 저장 프로 시저를 사용하여 더 빠를 수 있다고 생각되는 쿼리를 작성했지만 T-SQL 담당자가 아닙니다. 비교할 방법을 모르겠습니다.스토어드 프로 시저/ColdFusion의 Select 쿼리를 기반으로 테이블 업데이트
동적으로 생성 된 cfquery를 기반으로하는 테이블에서 여러 필드를 선택하는 초기 쿼리를 실행하고 있습니다. 이 쿼리를 SQL Server 저장 프로 시저로 변환하는 방법을 알고 있다고 생각합니다.
그러나 그 직후에 나는 그 쿼리의 모든 기본 키 ID를 가져 와서 해당 ID로 레코드를 "잠급니다"별도의 테이블에 대해 다른 쿼리를 실행합니다. 잠금은 시스템에이 레코드가 "체크 아웃"되었음을 알리는 두 번째 테이블의 비트 필드 (플래그)입니다. 난 단위로 실행되도록 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 결과 집합을 반환합니다. cfstoredproc
을 사용하여 호출 할 수있는 단일 SQL Server 2008 저장 프로 시저에서 동일한 작업을 수행하는 방법은 무엇입니까?
다시 CF로 결과 집합을 검색 한 다음 다른 쿼리를 다시 DB에 호출해야하므로 원래의 CF 방식 (cfquery
)이 저장 프로 시저만큼 효율적이지 않다고 생각합니다. 단일 저장 프로시 저는 DB에서 모든 작업을 수행 한 다음 원래 쿼리 결과 집합을 반환합니다.
아이디어가 있으십니까?
좋아,이 대답에 대한 온 전성 검사가 필요합니다. table1 데이터는 일정한 플럭스에 있습니다 ... 본질적으로 대기열입니다. 이것은 하나의 storedproc 안에 있기 때문에 본질적으로 단일 트랜잭션 권한으로 실행됩니다. 의미는, 내가 테이블 1에서 두 번 SELECT를 실행하기 때문에, 나는 같은 결과를 두 번 다시 얻고 있음을 보장해야합니다. 많은 사용자가이 기능을 정기적으로 사용하기 때문에 잠금 기능이 제대로 작동하는지 확인해야합니다. –
아니요, 단일 트랜잭션으로 실행되고 있지 않습니다. 업데이트를 실행하기 전에 출력용 데이터가 필요한 경우 다른 방법으로 수행해야합니다. 나는 당신의 질문에 전체 잠금 장치를 잡지 않았다. –