我正在使用 Coldfusion 9 和 SQL Server 2008。我正在尝试学习这些平台并真正学习如何有效地利用这两个平台来生成报告解决方案。我在存储过程或存储过程方面遇到了一些巨大的挑战。我想要的只是一个非常简单的答案,让我的存储过程达到我可以在 CFML 中利用它们并将数据提供给需要它的人的程度。
我在网上做了一些研究,似乎 SQL Server 2008 利用了放置在 RAM (@) 中或为本地用户 (#) 写入磁盘的临时表。我的问题是我似乎无法让生成的临时表从进程调用中将数据返回给 ColdFusion,尽管当我运行添加到 SQL Server 中的临时表中的 SQL 查询部分时,它的工作原理类似于魅力。我要做的就是将一个简单的表返回给 ColdFusion,并确保我以最有效的方式对其进行编码。
我试过: - 使用 Return 语句,但这似乎会产生 RAM 表 (@) 的语法错误。- 使用持久临时表 (#) - 尽管各种在线论坛似乎认为使用此功能,但应用程序会因此而受到很大的性能影响。(每个人都是批评家。)
我的目标是: - 尽可能多地学习这个过程,尽可能多地重复使用它 - 学习正确的方法来做到这一点,以便查询尽可能好地执行。- 了解在什么情况下我在 SPROCS 中使用 (@) 和 (#) 临时表以及为什么。一些人认为持久临时表 (#) 更好,因为它可以为编译期间触发的其他存储过程释放内存,而另一些人认为让服务器去硬盘写入数据更慢。- 了解为什么下面的语法不起作用
目前我的 CFML 代码如下所示:
<!--- ===========================================================================================================================
================================================= Page Resources ================================================================
=============================================================================================================================--->
<CFSTOREDPROC datasource="PoliticalDonationsDB" procedure=" sp_GetCurrentDonationCount_withDateRange" result="DONATIONCOUNT">
<!--- In --->
<cfprocparam cfsqltype="INT" dbvarname="SDate" value="2004">
<cfprocparam cfsqltype="INT" dbvarname="EDate" value="2005">
<!--- OUT --->
<cfprocresult name="DonationCount">
</CFSTOREDPROC>
<!--- ===========================================================================================================================
================================================= Page Display ==================================================================
=============================================================================================================================--->
<HTML>
<HEAD>
<TITLE><CFOUTPUT>Title</CFOUTPUT></TITLE>
</HEAD>
<BODY>
<div id="logo">
</div><!--- End logo div --->
<div id="currentRecords">
<CFDUMP var="#VARIABLES#">
<CFDUMP VAR="#DONATIONCOUNT#">
</div><!---End currentRecords--->
<div id="navigation">
<ul>
<li>Companies</li>
<ul>
<li></li>
</ul>
</ul>
</div><!--- End navigation div--->
<div id="statisticsTab">
</div> <!--- End Statistics div--->
</BODY>
</HTML>
我的 SQL Server 代码如下所示:
Use Politics
GO
ALTER procedure sp_GetCurrentDonationCount_withDateRange
@SDate AS int,
@EDate AS int
AS
BEGIN
--Create RAM Table
DECLARE @DonationCountTable TABLE
( donationKey INT,
CompanyKey INT,
SenatorKey INT,
donationAmount MONEY,
donationDateFY INT
)
--Put the stuff into the RAM table
INSERT INTO @DonationCountTable (donationKey, CompanyKey, SenatorKey, donationAmount, donationDateFY)
SELECT * FROM PoliticalDontations
WHERE donationDateFY BETWEEN @SDate AND @EDate
ORDER BY donationDateFY, CompanyKey ASC
--Get the stuff out of the RAM Table
SELECT * FROM @DonationCountTable
END