思路有问题,按照这样的思路,要保证不重复,只能加表锁,加表锁费用太大,不提倡使用。在存储过程中定义的变量当同时调用该存储过程时,将会出现什么结果?
互相不会有影响,不必担心这个问题。重复的原因是
你用max(编号)产生新编号
互相不会有影响,不必担心这个问题。重复的原因是
你用max(编号)产生新编号
解决方案 »
- 如何查出这样的记录?
- Login failed for user 'sa'. 原因: 密码验证失败,出现基础结构错误。请检查以前的错误。
- 最近刚开始学习PowerDesing 觉得和用Sql-server Management Studio设计数据库差不多
- 【求助】请教如何连续存入信息到同一个字段,信息之间以逗号隔开
- 课程设计求助
- 一个关于sql连接的问题
- 通过结果集获取自增性ID的当前插入值的问题
- sql语句请教(两张表)
- 请问,如何建立一个新的数据库,数据和原数据库一致,只是名字改变。
- 请教一格式化函数!大虾们救救我吧!
- 欢迎大家加入SQL企业群组3764722,可以讨论有关SQL的有关内容
- 怎么得到指定表最后一次修改的行?
以保证
select max(编号) ...
后
insert 新编号
前无人可以再
select max(编号) ...既然用到了事务,事务的设计原则是避免与用户交互,因此在设计上,不应该在取得编号后,由用户决定是否放弃(生成就生成了,放弃了就是空缺一个编号).
CREATE PROCEDURE [Insert_BillId]
(@货名 [varchar](10),
@发货单位[varchar](40),
@编号[varchar](13)output,
@返回内容[varchar](40) output)AS
begin tran
select 编号=right(100000001+isnull(max(编号),0),8)
from wzxx with(tablockx)
where 名称 = @货名 AND 发货单位 = @发货单位
and ([编号] ='' or [编号] is null )
if @@rowcount=0
begin
set @返回内容 = '没有符合条件的数据!'
rollback tran
return
end UPDATE [aaa].[dbo].[wzxx]
SET [编号] = @编号
WHERE 名称 = @货名 AND 发货单位 = @发货单位
and ([编号] ='' or [编号] is null )
if @@rowcount=0 or @@error<>0
begin
set @返回内容 = '没有符合条件的数据!'
rollback tran
return
end commit tran
go