首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

自动加1的有关问题

2012-02-12 
自动加1的问题create Table AA(UYEAR varchar(4),UDIV varchar(1),AUID int)2008 L 22008 A 3如果输入 200

自动加1的问题
create Table AA
(UYEAR varchar(4),UDIV varchar(1),AUID int)

2008 L 2
2008 A 3

如果输入 2009 L 
想要的结果是 2009 L 1
如果输入 2008 L
想要得结果是 2008 L 3

proc


ALTER PROCEDURE dbo.StoredProcedure2 
@UYEAR as varchar(4),
@UDIV as varchar(1),
@ERRORCODE as int output,
@AUID as int output  
AS
/* SET NOCOUNT ON */ 

Begin Transaction

SELECT @AUID=AUID FROM AA
  WHERE UYEAR = @UYEAR AND UDIV = @UDIV
   
if @@ROWCOUNT < = 0 
begin 

print 'AA'

INSERT INTO AA(UYEAR,UDIV,AUID)
  VALUES (@UYEAR,@UDIV,1)
print @@error
end
else
begin
UPDATE AA
SET UYEAR = @UYEAR,
UDIV = @DIV,
  SYOZOKU_NM = SYOZOKU_NM+1,
  WHERE UYEAR = @UYEAR and UDIV= @UDIV
print 'BB'
print @@error
end

IF @@ERROR <> 0
BEGIN
Rollback Transaction
SET @ERRORCODE = 3
RETURN
END

Commit Transaction

SET @ERRORCODE = 0

RETURN

为啥执行的结果不正确呢?
求救

[解决办法]
搞这么复杂做什么

[解决办法]

SQL code
ALTER   PROCEDURE   dbo.StoredProcedure2   @UYEAR   as   varchar(4), @UDIV     as   varchar(1), Asif exists(Select 1 FROM AA WHERE   UYEAR  =   @UYEAR   AND   UDIV   =   @UDIV )  Select UYEAR,UDIV,AUID+1 FROM AA WHERE   UYEAR  =   @UYEAR   AND   UDIV   =   @UDIVelse  Select 'UYEAR'=@UYEAR,'UDIV' =@UDIV,'AUID'=1
[解决办法]
SQL code
create   Table   AA (UYEAR   varchar(4),UDIV   varchar(1),AUID   int) ------------------------------搞那么复杂?create proc wsp@uyear varchar(4),@udiv varchar(1)as      if exits(select 1 from AA where uyear=@year and udiv=@udiv)              update aa set auid=auid+1 where uyear=@year and udiv=@udiv       else              insert into aa select @uyear,@udiv,1
[解决办法]
好的,呵呵 
不过还有一个问题。 
因为我这个自动加1,是要实现派他操作的。 
如果没有 Transaction的话,会不会出现同一时间更新操作呢? 

我的AUID就是想实现银行账户的流水号,不管谁操作,都不能重复。
--------------------
if exits(select 1 from AA where uyear=@year and udiv=@udiv)
update aa set auid=auid+1 where uyear=@year and udiv=@udiv 
else
insert into aa select @uyear,@udiv,1


一次只有一个DML语句在执行,一个DML语句默认就是一个Transaction
所以不会的

热点排行
Bad Request.