私はColdfusion9とSQLServer2008を使用しています。プラットフォームを学び、レポートソリューションに両方のプラットフォームを効果的に活用する方法を実際に学ぼうとしています。ストアドプロシージャ、つまりsprocでいくつかの大きな課題がありました。私が欲しいのは、sprocをCFMLで活用して、それを必要とする人々にデータを取得できるようにするための非常に簡単な答えです。
オンラインで調査を行ったところ、SQL Server 2008は、RAM(@)に配置されているか、ローカルユーザー(#)のディスクに書き込まれている一時テーブルを利用しているようです。私の問題は、生成された一時テーブルがプロセス呼び出しからColdFusionにデータを返すように見えないことですが、SQL Serverの一時テーブルに追加されるSQLクエリの部分を実行すると、魅力。簡単なテーブルをColdFusionに返し、これを可能な限り最も効率的な方法でコーディングしていることを確認するだけです。
私は試しました:-Returnステートメントを使用しましたが、これはRAMテーブル(@)で構文エラーを生成するようです。-永続的な一時テーブルの使用(#)-さまざまなオンラインフォーラムがこれを使用すると考えているようですが、アプリケーションはこれを行うことでパフォーマンスに大きな打撃を与えます。(誰もが批評家です。)
私の目標は次のとおりです。-このプロセスを学習し、可能な限り再利用できるようにする-クエリが可能な限り実行されるように、これを行う正しい方法を学習します。-SPROCSで(@)および(#)一時テーブルを使用する状況とその理由を理解します。永続的な一時テーブル(#)は、コンパイル中に起動された他のsprocのためにRAMを解放するので優れていると考える人もいれば、サーバーをハードディスクに移動させてデータを書き込むのは遅いと考える人もいます。-以下の構文が機能しない理由を理解する
現在、私の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>
そして、私のSQLServerコードは次のようになります。
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