我写了一个存储过程来更新满足某些条件的记录。我想检查传递的值是否包含在表中。我正在使用
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
对于具有不同日期的相同voucher_type和voucher_sub_type,应允许凭证Sname,并且不应对voucher_type和voucher_sub_type的不同组合使用相同的voucher_sname。
我的sp会如何满足这个想法?
答案 0 :(得分: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