سؤال

وأنا على الحصول دون استثناء عندما وانا ذاهب الى إدخال سجل في الجدول من خلال StoredProceduer من سيكلسرفير لدي حقل الذي أحتاج ش تحديث فورا بعد إدراج سجل جديد في الجدول. لأنني خلقت sotredprocedure التي كتبتها قيادة إدراج أولا وبعد ذلك كتبت أمر التعديل لنفس recored ولكنه أعطاني دون خطأ SQlException: عدد المعاملات بعد EXECUTE يشير إلى وجود عدد غير متطابقة من BEGIN وارتكاب البيانات. عدد السابقة = 1، العدد الحالي = تم الكشف 2. المعاملة Uncommittable في نهاية الدفعة. يتم إرجاع المعاملة مرة أخرى. بعض خطأ في تنفيذ الإجراء المخزن

وحاولت بطريقة أخرى أيضا مثل: أنا فقط كتبت القيادة إدراج في إجراء مخزن وأنا خلقت مشغل afterInsert التي أنا اطلاق أمر التعديل. ولكن لا يزال أواجه فوق استثناء

والصفات: بنية الجدول:

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]

وإجراء مخزن:

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 

والزناد:

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
هل كانت مفيدة؟

المحلول

وتعليقك على إجابة أخرى ذكر "انا الحفاظ على المعاملات من Vb.net أيضا بينما يدعو هذا الإجراء المخزن". وهذا هو السبب

وعليك أن توازن الخاص BEGIN TRAN ويرتكب / مستواها السابق حتىيبدأ TRANCOUNT وينتهي بنفس القيمة لنفس النطاق.

وإما أن تفعل كل شيء في بروك المخزنة أو تفعل كل شيء في عميل

نصائح أخرى

ويبدو لي وكأنك لم تفعل شيئا مع الصفقة مفتوحة إذا تم العثور على خطأ في كتلة TRY الخاص بك - ولن يرشح نفسه ارتكاب، ولكن كتلة CATCH لا يوجد لديه التراجع

.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top