2017-08-04 2 views
-1

Ich habe die folgende gespeicherte Prozedur:Stored Procedure Eingangsparameter Validierung

CREATE procedure usp_insert_abm_tctrol_ch 
    (@cod_suc numeric(3), 
    @id_bco numeric(3), 
    @cod_banco numeric(3), 
    @nro_cta VARCHAR(15), 
    @fec_activa SMALLDATETIME, 
    @fec_inactiva SMALLDATETIME, 
    @nro_ch_desde numeric(9), 
    @nro_ch_hasta numeric(9), 
    @ult_nro_ch numeric(9), 
    @sn_ch_inicio numeric(3), 
    @tipo_chequera VARCHAR(2), 
    @sn_estadoi_ch INT, 
    @sn_estadof_ch INT) 
as 
begin 
    declare @error varchar(500) 

    begin try 
    begin tran 
     set @error = '' 
     set @error = 'hubo un error' 

     if @error <> '' 
     begin  
      RAISERROR(@Error, 16, 10) 
     end 

     insert into tctrol_ch (cod_suc, id_bco, cod_banco, nro_cta, fec_activa, fec_inactiva, nro_ch_desde, nro_ch_hasta, ult_nro_ch, sn_ch_inicio, tipo_chequera, sn_estadoi_ch, sn_estadof_ch) 
      select 
       @cod_suc, @id_bco, @cod_banco, @nro_cta, @fec_activa, 
       @fec_inactiva, @nro_ch_desde, @nro_ch_hasta, @ult_nro_ch, 
       @sn_ch_inicio, @tipo_chequera, @sn_estadoi_ch, @sn_estadof_ch 
     commit tran 
    end try 
    begin catch 
     rollback tran 

     declare @Err varchar(max) 

     set @Err = ERROR_MESSAGE() 
     RAISERROR(@Err , 16, 10) 
    end catch 

Ich möchte bestätigen, dass die @nro_cta (Nummer Konto) gehört zu der aktuellen Bank (@id_bco). Wie kann ich das machen?

Ich habe eine Tabelle "Bank", die einen Spaltennamen "nro_cta" haben. Ich möchte es mit einer if-Anweisung verifizieren. Ich bin ein Anfänger zu gespeicherten Prozeduren, danke!

+0

Also habe ich Ihren Code eingerückt, um es lesbar zu machen - beachten Sie, wie Sie eine Variable setzen und dann sofort testen? Außerdem gibt es eine Reihe von unvollständigen Anweisungen - das ist ein großer Haufen Code, der nichts bedeutet. – Hogan

+0

Sie würden diese Validierung mit einer Select-Anweisung durchführen. Wir können Ihnen möglicherweise nicht helfen, weil Sie keine Details über den Tisch oder das, was Sie tun möchten, angegeben haben. –

+1

Die einfachste Möglichkeit zu überprüfen ist, ob ein Bankkonto existiert: 'IF EXISTS (SELECT * FROM [Bank] WHERE nro_cta = @ nro_cta'. Sie können dann etwas in Ihrer if-Bedingung ausführen. – Alex

Antwort

4

Sie müssen etwas hinzufügen wie

declare @testbank numeric(3) 

SET @testbank = (SELECT id_bco from Bank WHERE nro_cta = @nro_cta) 

If @testbank <> @id_bco OR @testbank IS NULL 
    BEGIN 
     RAISERROR('Wrong bank', 16, 10) 
    END 

Ich kann nicht absolut sicher sein, denn obwohl man sagen, dass die Bank ein Feld nro_cta hat, müssen Sie nicht sagen, auf welchem ​​Gebiet die Bank-ID genannt wird, also bin ich raten ist es id_bco um der Konsistenz willen.

Damit dies auch funktioniert, gehe ich davon aus, dass id_bco und nro_cta die gleichen Datentypen wie @id_bco und @nro_cta sind.

+1

Wäre mit einem exists-Check etwas einfacher aber ich vermute auch, dass dies in etwa dem entspricht, was sie wollen. –

+0

@SeanLange Ich dachte an IF EXISTS, wo account = account und bank = bank (beachte, dass du das 'and' haben musst) aber dann dachte er, dass er es vielleicht will etwas anderes zu tun, wenn das Konto zu einer anderen Bank gehört Einfach mit if exists nur sagen, dass etwas nicht stimmt: Bank könnte nicht existieren, Konto existiert nicht oder Konto in falscher Bank Ich habe versucht, auf ihn zu zeigen auf einen Weg, um ein bisschen mehr Informationen zu bekommen, wenn es einen Fehler gibt .. –

+0

Ja, ich wollte nicht einwenden, dass irgendetwas mit diesem Ansatz überhaupt nicht in Ordnung ist, wir alle raten, da das OP fast nichts zur Verfügung stellte Einzelheiten. –