2

ColdFusion 9 및 SQL Server 2008을 사용하고 있습니다. 플랫폼을 배우려고하고 있으며보고 솔루션을 위해 두 플랫폼을 효과적으로 효과적으로 활용하는 방법을 배우고 있습니다. 스토어드 프로 시저 또는 sprocs에 대해 큰 어려움을 겪었습니다. 내가 원하는 것은 sprocs를 CFML에서 활용하고 필요한 사람들에게 데이터를 제공 할 수있는 지점에 도달하는 간단한 방법입니다.Coldfusion CFSTOREDPROC가 테이블을 반환하지 않습니다.

온라인으로 조사한 결과 SQL Server 2008은 RAM (@)에 배치되거나 로컬 사용자 (#)의 디스크에 쓰여지는 임시 테이블을 활용하는 것으로 나타났습니다. 내 문제는 프로세스 호출에서 ColdFusion으로 데이터를 반환하는 생성 된 임시 테이블을 얻을 수 없다는 것입니다. SQL Server에서 임시 테이블에 추가되는 SQL 쿼리 부분을 실행할 때 매력. 내가하고 싶은 일은 ColdFusion에 간단한 테이블을 반환하고 가능한 가장 효율적인 매너에서이 테이블을 코딩하는 것입니다.

시도 : - Return 문을 사용하지만 RAM 테이블 (@)에서 구문 오류가 발생하는 것 같습니다. - 영구적 인 임시 테이블 사용 (#) - 다양한 온라인 포럼에서이를 사용하여 생각하는 것 같지만이를 통해 응용 프로그램의 성능이 크게 향상됩니다. (모두가 비평가입니다.)

내 목표

은 다음과 같습니다 -뿐만 아니라 I가 할 수있는이 과정을 배우려면 많은 내가 할 수있는 한 그것을 다시 사용 -이 때문에 쿼리뿐만 아니라 수행해야 할 올바른 방법 알아보기 가능하다면. - SPROCS의 임시 테이블 (@) 및 임시 테이블 (#)을 사용하는 이유와 그 이유를 이해합니다. 어떤 사람들은 컴파일하는 동안 다른 sprocs가 실행되는 동안 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> 

그리고 내 SQL 서버 코드는 다음과 같습니다

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 
+0

dbvarname는 ColdFusion에서 8 추천되지 않습니다 그것은 않습니다 아무것도 : http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_p- q_14.html –

답변

3

너는 이것을 필요로한다 :

<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 
+0

코드에서 제안한 위의 변경을했습니다. . 나는 아직도 SPROC에서 아무것도 얻지 못하고있다. –

+0

SPROC 호출에서 공백을 제거하면 도움이됩니다. 매력처럼 작동합니다. 에빅 감사합니다. –

1

시도 :

<cfprocparam cfsqltype="INT" dbvarname="@SDate" value="2004"> 
<cfprocparam cfsqltype="INT" dbvarname="@EDate" value="2005"> 
+0

dbvarname은 ColdFusion 8에서 더 이상 사용되지 않습니다. (http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_p-q_14.html) –

1
--Put the stuff into the RAM table 
--/// Comment /// (this actually returns the first resultset, consisting of an ADO accessibel object containing the recordcount affected *RW) 
    INSERT INTO @DonationCountTable (donationKey, CompanyKey, SenatorKey, donationAmount, donationDateFY) 
    SELECT * FROM PoliticalDontations 
    WHERE donationDateFY BETWEEN @SDate AND @EDate 
    ORDER BY donationDateFY, CompanyKey ASC 

의 목록입니다 - 트랩 사람들이 때때로 저장 프로 시저에 해당하는 것은 많은 것입니다 명령의 레코드 집합 개체가 발생합니다 (INSERT ... SELECT는이 예제에서 수행함), 나는 모든 레코드 집합을 원하지 않거나 적어도 우리에게 필요하다고 생각합니다. e를 눌러 적절한 것을 선택하십시오.

이 문제를 해결하는 방법 중 하나는 CREATE ... AS 바로 다음에 시작하는 것입니다. "SET NOCOUNT ON"문을 사용하십시오. 나는 그다지 - 그 다음에 :

  --Get the stuff out of the RAM Table 
     SELECT * FROM @DonationCountTable 

은 유일한 결과 집합을 반환해야합니다. 나는 이것이 오래되었음을 알고 있지만 어쩌면 누군가를 돕는다.MySQL이나 오라클이 비슷한 문제를 일으키지 않았는지 확실하지 않은 과거의 SQL 코딩에 영향을 미쳤습니다.

R 화이트 - 드라이브 인에 의해 기여