2016-09-22 2 views
-1

Ich habe eine Prozedur in T-SQL geschrieben, die Fehlercount basierend auf Statuscode, Geschäftsjahr usw. zurückgibt, aber es hat 3 Stück beteiligt: ​​ 1. es Gibt den inneren Join von 2 Tabellen zurück, um selektive Spalten zu ziehen. 2. Eine case-Anweisung mit mehreren Wertmöglichkeiten für coloffset 3. Funktion, um errorcount zurückzugeben.T-SQL-Prozedur hat keine Fehler, aber muss verbessert werden

Wenn ich den Code ausführen gibt es Ausgabe mit 3 separaten Tabellen, aber ich habe die Absicht, Fehlercount als einzige Ausgabe zu erhalten. Wie kann ich das erreichen? Das Orakeläquivalent verwendete den Cursor. Muss ich es hier benutzen?

Hier ist der Code:

ALTER PROCEDURE [hsip].[ErrorCount] (
    @cRegion CHAR(2) ='00', 
    @cState_Code CHAR(2) = '00', 
    @nFY NUMERIC(4,0) = 0, 
    @nREPORT_ID NUMERIC(2,0) = 0, 
    @nSECTION_ID NUMERIC(2,0) = 0, 
    @nSUBSECTION_ID NUMERIC(2,0) = 0, 
    @nDISPLAY_NUMBER NUMERIC(38,0) = 0, 
    @nQUESTION_NUMBER NUMERIC(38,0) = 0, 
    @nQUESTION_PART_NUMBER NUMERIC(38,0) = 0, 
    @suser_id varchar(25) =NULL, 
    @nFY_ST_QUESTION_DTL_TABLE_ID numeric(38,0)) 

AS 

BEGIN 

    SET NOCOUNT ON; 

--declare nfy_st_question_dtl_table_id as integer 

--declare ncolumn_index cursor for 
declare @coloffset as integer 
[email protected] as numeric(38,0) 


select qi.REGION, qi.STATE_CODE, qi.FY, qi.REPORT_ID, qi.SECTION_ID, qi.SUBSECTION_ID, qi.DISPLAY_NUMBER, qi.QUESTION_NUMBER, qd.QUESTION_PART_NUMBER 
from FY_ST_QUESTION_DETAIL qd inner join FY_ST_QUESTION_INFO qi 
on qd.FY_ST_QUESTION_INFO_TABLE_ID = qi.FY_ST_QUESTION_INFO_TABLE_ID 
where qi.region = @cRegion 
     and qi.state_code = @cState_Code 
     and qi.fy = @nFY 
     and qi.report_id = @nREPORT_ID 
     and qi.section_id = @nSECTION_ID 
     and qi.subsection_id = @nSUBSECTION_ID 
     and qi.display_number = @nDISPLAY_NUMBER 
     and qi.QUESTION_NUMBER = @nQUESTION_NUMBER 
     and (QI.REPORTER_ID = @sUSER_ID or 
       QI.DELEGATE_ID = @suser_id or 
       QI.SUB_DELEGATE_ID = @suser_id) 
     and QD.QUESTION_PART_NUMBER = @nQUESTION_PART_NUMBER ; 


     set @coloffset= 
      case 
      when (@nREPORT_ID = 1 and @nQUESTION_NUMBER = 21) then 17 
      when (@nREPORT_ID = 1 and @nQUESTION_NUMBER = 32) then 16 
      when (@nREPORT_ID = 3 and @nQUESTION_NUMBER = 11) then 15 
      when (@nREPORT_ID = 3 and @nQUESTION_NUMBER = 12) then 27 
     end; 

    select [hsip].[getErrorCount](@nFY_ST_QUESTION_DTL_TABLE_ID, 0, @coloffset)as ErrCount;  

END 

Dank,

+1

Ich sehe nicht, wie dieser Code eine Ausgabe mit 3 Tabellen generieren kann. Es hat nur 2 Auswahlmöglichkeiten. –

+0

Die dritte Tabelle kommt von der Funktion geterrorcount. Ich kann den Code posten – user3147594

+0

In diesem Fall, woher kommt die zweite Tabelle? –

Antwort

0

Kommentar oder die SELECT-Anweisungen löschen, die die Tabellen erstellen, die Sie in Ihrer Ausgabe nicht wollen.

+0

Sorry, für die Verwirrung. Sie haben Recht, es gibt 2 Tabellen zurück und benötigt die Ausgabe als Fehlerzählung. Ich war verwirrt über den Rückgabewert. Wieder meine schlechte .. – user3147594

+0

Ich bezweifle, dass das funktioniert - ist die Ausgabe der Funktion deterministisch ohne die Select-Anweisungen - sie sind - zum Beispiel der zweite eine Variable ändert, die im Funktionsaufruf verwendet wird. Natürlich können wir nicht sicher sein, ohne die Quelle für diese Funktion zu sehen. – Hogan

+0

Derjenige, der eine Variable ändert, würde keine Tabelle zurückgeben, und ich sehe nicht, wie der, der eine Tabelle zurückgibt, möglicherweise die Ausgabe der Funktion beeinflussen kann. –

Verwandte Themen