1

特定の条件を満たすレコードを更新するためのストアド プロシージャを作成しました。渡された値がテーブルに含まれているかどうかを確認したい。私は使っている

declare @disp_sname varchar(100);
declare @disp_type varchar(100);
declare @disp_sub_type varchar(100);
declare @disp_date date;

select @disp_sname= voucher_sname,@disp_type=voucher_type,
@disp_sub_type=voucher_sub_type,@disp_date=voucher_date
from voucher_master

最後の行の値だけを返しています。

私のストアドプロシージャ全体は

    USE [new_esatnam]
GO
/****** Object:  StoredProcedure [dbo].[spUpdateVoucherNo]    Script Date: 08/13/2012 13:36:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[spUpdateVoucherNo] 
(
@voucher_id as int,
@voucher_separate_numbering as varchar(2),
@voucher_method_numbering as varchar(2),
@voucher_last_number as int,
@voucher_sname as varchar(15),
@voucher_type as varchar(2),
@voucher_sub_type as varchar(2),
@voucher_date as datetime,
@company_code as varchar(50),
@updated_by as int,
@updated_on as datetime
)   
AS
BEGIN
SET NOCOUNT ON;
declare @disp_sname varchar(100);
declare @disp_type varchar(100);
declare @disp_sub_type varchar(100);
declare @disp_date date;

select @disp_sname= voucher_sname,@disp_type=voucher_type,
@disp_sub_type=voucher_sub_type,@disp_date=voucher_date
from voucher_master

if @disp_sname=@voucher_sname and @disp_type=@voucher_type and @disp_sub_type=@voucher_sub_type and @disp_date!=@voucher_date
BEGIN
update voucher_master set voucher_type=@voucher_type,voucher_sub_type=@voucher_sub_type,
voucher_sname=@voucher_sname,
voucher_separate_numbering=@voucher_separate_numbering,
voucher_method_numbering=@voucher_method_numbering,
voucher_date=@voucher_date,
voucher_last_number=@voucher_last_number,
company_code=@company_code,
updated_by=@updated_by,
updated_on=@updated_on where voucher_id=@voucher_id 
END
if @disp_sname!=@voucher_sname
BEGIN
update voucher_master set voucher_type=@voucher_type,voucher_sub_type=@voucher_sub_type,
voucher_sname=@voucher_sname,
voucher_separate_numbering=@voucher_separate_numbering,
voucher_method_numbering=@voucher_method_numbering,
voucher_date=@voucher_date,
voucher_last_number=@voucher_last_number,
company_code=@company_code,
updated_by=@updated_by,
updated_on=@updated_on where voucher_id=@voucher_id 
END

return @@ROWCOUNT
END

ストアド プロシージャがこの条件を満たすようにしたい

 voucher_type    voucher_sub_type     date        voucher_sname
 INV                DOM              1/1/2000       ID            allowed
 INV                DOM              15/1/2000      ID            allowed

 INV                INT              1/1/2000       ID            not allowed
 INV                INT              15/3/2012      ID            not allowed

バウチャー Sname は、異なる日付の同じ ticket_type および ticket_sub_type に対して許可されるべきであり、同じ bower_sname は、voucher_type および ticket_sub_type の異なる組み合わせに対して許可されるべきではありません。

私のspがこれをどのように満足させるかについてのアイデアはありますか?

4

1 に答える 1

0

最初の aql クエリでこれを使用するだけです --voucher_id=@voucher_id

    ALTER PROCEDURE [dbo].[spUpdateVoucherNo] 
        (
        @voucher_id as int,
        @voucher_separate_numbering as varchar(2),
        @voucher_method_numbering as varchar(2),
        @voucher_last_number as int,
        @voucher_sname as varchar(15),
        @voucher_type as varchar(2),
        @voucher_sub_type as varchar(2),
        @voucher_date as datetime,
        @company_code as varchar(50),
        @updated_by as int,
        @updated_on as datetime
        )   
        AS
        BEGIN
        SET NOCOUNT ON;
        declare @disp_sname varchar(100);
        declare @disp_type varchar(100);
        declare @disp_sub_type varchar(100);
        declare @disp_date date;

DECLARE @minid int,@maxid int
select @minid=min(voucherid),@maxid=max(voucherid) from voucher_master 

while(@minid <= @maxid)
BEGIN
        select @disp_sname= voucher_sname,@disp_type=voucher_type,
        @disp_sub_type=voucher_sub_type,@disp_date=voucher_date
        from voucher_master where voucher_id=@minid

        if @disp_sname=@voucher_sname and @disp_type=@voucher_type and @disp_sub_type=@voucher_sub_type and @disp_date!=@voucher_date
        BEGIN
        update voucher_master set voucher_type=@voucher_type,voucher_sub_type=@voucher_sub_type,
        voucher_sname=@voucher_sname,
        voucher_separate_numbering=@voucher_separate_numbering,
        voucher_method_numbering=@voucher_method_numbering,
        voucher_date=@voucher_date,
        voucher_last_number=@voucher_last_number,
        company_code=@company_code,
        updated_by=@updated_by,
        updated_on=@updated_on where voucher_id=@voucher_id 
        END
        if @disp_sname!=@voucher_sname
        BEGIN
        update voucher_master set voucher_type=@voucher_type,voucher_sub_type=@voucher_sub_type,
        voucher_sname=@voucher_sname,
        voucher_separate_numbering=@voucher_separate_numbering,
        voucher_method_numbering=@voucher_method_numbering,
        voucher_date=@voucher_date,
        voucher_last_number=@voucher_last_number,
        company_code=@company_code,
        updated_by=@updated_by,
        updated_on=@updated_on where voucher_id=@voucher_id 
        END

SET @minid=@minid+1
END

END
于 2012-08-13T08:26:49.353 に答える