Frage

Ich erhalte unter Ausnahme, wenn ich Rekord durch StoredProceduer von Sqlserver in einer Tabelle eingeben werde Ich habe ein Feld, das i u unmittelbar nach dem Einsatz neuer Datensatz in der Tabelle aktualisieren müssen. dafür habe ich eine sotredprocedure in dem Einsatzbefehl i zuerst und danach schrieb ich schrieb für gleiche ein Update-Befehl recored aber es gab mir folgenden Fehler SQLException: Transaktionsanzahl nach EXECUTE zeigt eine unpassende Anzahl von BEGIN und COMMIT-Anweisungen. Vorherige count = 1, aktuelle Zählung = 2. Commit-Transaktion wird am Ende des Charge erfaßt. Die Transaktion zurückgerollt. Einige Fehler in gespeicherten Prozedur Ausführung

habe ich versucht, in einer anderen Art und Weise auch wie: i insert-Befehl nur in StoredProcedure schrieb, und ich erstellt einen Trigger Afterinsert in dem ich Update-Befehl am Brennen. aber immer noch ich bin vor über Ausnahme

Details: Tabellenstruktur:

CREATE TABLE [dbo].[TabStoreGRNMaster](
    [pk_grnm_id] [bigint] IDENTITY(1,1) NOT NULL,
    [fk_col_id] [bigint] NULL,
    [fk_sup_id] [bigint] NULL,
    [grnm_grnno] [varchar](50) NULL,
    [grnm_date] [nvarchar](10) NULL,
    [grnm_partyinvno] [varchar](50) NULL,
    [grnm_invdate] [nvarchar](10) NULL,
    [grnm_freight] [numeric](7, 2) NULL,
    [grnm_otherchrg] [numeric](7, 2) NULL,
    [grnm_roundoff] [bit] NULL,
    [Fk_User_Id] [bigint] NULL,
    [grnm_EntryDate] [nvarchar](8) NULL,
 CONSTRAINT [PK_TabStoreGRNMaster] PRIMARY KEY CLUSTERED 
(
    [pk_grnm_id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

StoredProcedure:

USE [Kollege]
GO
/****** Object:  StoredProcedure [dbo].[StoreGRNMaster]    Script Date: 11/27/2009 10:20:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[StoreGRNMaster]
    (
    @pk_grnm_id         [bigint] output ,
    @fk_col_id          [bigint] = 0 ,
    @fk_sup_id          [bigint] = 0 ,
    @grnm_grnno         [varchar](50) = '',
    @grnm_date          [nvarchar](10) = null,
    @grnm_partyinvno            [varchar](50) = '',
    @grnm_invdate           [nvarchar](10) = null,
    @grnm_freight           [numeric] = 0 ,
    @grnm_otherchrg         [numeric] = 0 ,
    @grnm_roundoff          [bit] = 0 ,
    @Fk_User_Id         [bigint] = 0 ,
    @grnm_EntryDate         [nvarchar](8) = null,
    @opt                        [BIGINT] =0,
    @del                        [bit] =0

    )
 as 
 begin 
 SET NOCOUNT ON; 
 BEGIN TRY 
 begin transaction 
 if isnull(@opt,0) = 0 begin
 INSERT INTO TabStoreGRNMaster
    (
    fk_col_id,
    fk_sup_id,
    grnm_grnno,
    grnm_date,
    grnm_partyinvno,
    grnm_invdate,
    grnm_freight,
    grnm_otherchrg,
    grnm_roundoff,
    Fk_User_Id,
    grnm_EntryDate
    )
VALUES
    (
    @fk_col_id,
    @fk_sup_id,
    @grnm_grnno,
    @grnm_date,
    @grnm_partyinvno,
    @grnm_invdate,
    @grnm_freight,
    @grnm_otherchrg,
    @grnm_roundoff,
    @Fk_User_Id,
    @grnm_EntryDate
    )
set @pk_grnm_id = @@identity 
 end 
 else 
 begin 
 if @del = 0 
 UPDATE TabStoreGRNMaster
SET
        fk_col_id           =   @fk_col_id,
        fk_sup_id           =   @fk_sup_id,
        grnm_grnno          =   @grnm_grnno,
        grnm_date           =   @grnm_date,
        grnm_partyinvno         =   @grnm_partyinvno,
        grnm_invdate            =   @grnm_invdate,
        grnm_freight            =   @grnm_freight,
        grnm_otherchrg          =   @grnm_otherchrg,
        grnm_roundoff           =   @grnm_roundoff,
        Fk_User_Id          =   @Fk_User_Id,
        grnm_EntryDate          =   @grnm_EntryDate
WHERE
(
pk_grnm_id  =   @opt
)  

if @del=1 and isnull(@opt,0) <> 0 

 DELETE from [TabStoreGRNMaster]
WHERE
    ( [pk_grnm_id]   = @opt)
end 
 commit transaction 
 END TRY 
 BEGIN CATCH 
 raiserror ('Some Error in stored procedure execution',1,1) 
 END CATCH; 
 END 

Trigger:

alter TRIGGER TGRStoreGRNMasterCode
ON tabStoreGRNMaster
AFTER INSERT 
AS
begin
declare @pk varchar(10)
declare @colcode varchar(10)
declare @current_session varchar(20)
declare @colid bigint
set @pk  = (select pk_grnm_id from Inserted)
--set @colid = (select fk_col_id from Inserted)
set @colcode= 'jiet'--(select col_code from tabcollegemaster where pk_col_id =5)  (when i replace word 'Jiet' with commented qry i gets sql exception otherwise its working fine)
select @current_session = Ses_abbrev  from TabAcaSessionMast where ses_current = 1 
--update tabStoreGRNMaster set grnm_grnno= @colcode +'/' +@current_session+ '/' + @pk where pk_grnm_id=convert(bigint,@pk)
update tabStoreGRNMaster set grnm_grnno= (select col_code from tabcollegemaster where pk_col_id=5) +'/' +@current_session+ '/' + @pk where pk_grnm_id=convert(bigint,@pk)

end
War es hilfreich?

Lösung

Ihr Beitrag zu einer anderen Antwort erwähnt: „Ich bin Transaktionen von Vb.net halten auch während diese gespeicherte Prozedur aufrufen“. Dies ist die Ursache

Sie müssen Ihre TRAN balancieren BEGIN und COMMIT / Rollbacks so @@ TRANCOUNT beginnt und endet mit dem gleichen Wert für den gleichen Umfang.

Entweder tun sie alle in der gespeicherten proc oder tun es alle in der Client

Andere Tipps

Es scheint mir, wie du bist nicht mit der offenen Transaktion etwas zu tun, wenn ein Fehler in Ihrem TRY-Block gefunden wird - das würde COMMIT nicht ausgeführt, aber Ihr CATCH-Block keine ROLLBACK hat

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top