我正在使用Coldfusion 9和SQL Server2008。我正在努力学习这些平台,并真正了解如何有效地利用这两个平台来实现报告解决方案。我在使用存储过程或sprocs时遇到了一些很大的挑战。我想要的是一个非常简单的答案,让我的sprocs达到可以在CFML中利用它们的程度,并将数据提供给需要它的人。
我在网上做了一些研究,SQL Server2008似乎利用了放置在RAM中的临时表(@)或本地用户写入磁盘的临时表(#)。我的问题是,我似乎无法让生成的临时表将数据从流程调用返回给ColdFusion,尽管当我运行添加到SQL Server中临时表的那部分SQL查询时,它的工作方式非常出色。我所要做的就是将一个简单的表返回给ColdFusion,并确保我以最高效的方式对其进行编码。
我尝试过:-使用Return语句,但这似乎会产生RAM表(@)的语法错误。-使用持久临时表(#) -尽管各种在线论坛似乎认为这样做会对应用程序的性能造成很大的影响。(每个人都是评论家。)
我的目标是:-尽可能好地学习这个过程,尽可能多地重用它-学习正确的方法来做到这一点,以便查询尽可能好地执行。-了解我在SPROCS中使用(@)和(#)临时表的情况以及原因。一些人认为持久临时表(#)更好,因为它为编译期间触发的其他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发布于 2012-07-11 05:18:55
你需要这样做:
<cfprocparam cfsqltype="CF_SQL_INTEGER" value="2004">DBVARNAME已弃用:
http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_p-q_14.html
以下是可接受的CFSQLTYPES列表
CF_SQL_BIGINT
CF_SQL_BIT
CF_SQL_BLOB
CF_SQL_CHAR
CF_SQL_CLOB
CF_SQL_DATE
CF_SQL_DECIMAL
CF_SQL_DOUBLE
CF_SQL_FLOAT
CF_SQL_IDSTAMP
CF_SQL_INTEGER
CF_SQL_LONGVARCHAR
CF_SQL_MONEY
CF_SQL_MONEY4
CF_SQL_NUMERIC
CF_SQL_REAL
CF_SQL_REFCURSOR
CF_SQL_SMALLINT
CF_SQL_TIME
CF_SQL_TIMESTAMP
CF_SQL_TINYINT
CF_SQL_VARCHAR发布于 2012-07-11 05:11:31
尝试:
<cfprocparam cfsqltype="INT" dbvarname="@SDate" value="2004">
<cfprocparam cfsqltype="INT" dbvarname="@EDate" value="2005">https://stackoverflow.com/questions/11421933
复制相似问题