我正在使用ColdFusion作为项目,我写了一个查询,我认为使用存储过程可以更快,但我不是T-SQL人员,所以我不知道如何去做比较。基于存储过程中的Select查询更新表/ ColdFusion
我正在运行一个初始查询,该查询从基于动态构建的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结果集返回我的应用程序,它使用它来输出一些数据。如何在单个SQL Server 2008存储过程中完成同样的工作,我可以使用cfstoredproc
来调用?
同样,我在考虑原生CF方式(与cfquery
)不如存储过程有效,因为我必须将结果集检索回CF,然后再调用另一个查询回到DB。单个存储过程完成数据库中的所有操作,然后返回原始查询结果集以供使用。
任何想法?
好的,我需要一个理智的检查这个答案。 table1的数据是不断变化的......它本质上是一个队列。因为这是在单个存储过程中,它本质上是作为单个事务运行的吗?意思是,因为我在表1上运行两次SELECT,所以我需要保证两次都得到相同的结果。由于许多用户会定期执行此功能,因此我需要确保“锁定”正常工作。 – 2009-08-26 05:38:43
不,它并未作为单个事务运行。如果您在运行更新之前需要输出数据,则需要以不同的方式进行。我没有理解你问题中的全部问题。 – 2009-08-26 05:57:35