【发布时间】:2015-11-06 06:41:40
【问题描述】:
CREATE TRIGGER [dbo].[TR_dbo_GlLoan_LoanNumber] ON [dbo].[GlLoan] AFTER INSERT
AS
BEGIN
if @@ROWCOUNT = 0
return
SET NOCOUNT ON;
declare @count int;
set @count= (select max(loannumber) from glloan where branchid=(select branchid from inserted) and CompanyId=(select CompanyId from inserted))
update glloan set loannumber=@count+1 where id=(select id from inserted)
END
GO
对于给定的分行和公司,是否有可能重复贷款编号?
【问题讨论】:
-
不完全是您问题的答案,但是:使用身份作为贷款号码不是更简单吗?
-
你的触发器坏了。
inserted可以包含 多个 行,此时您会收到类似branchid=(select branchid from inserted)说“子查询返回多个值”的错误 -
@Marko 身份未使用,因为多个分支机构或公司将使用相同的贷款编号。
-
@Damien_The_Unbeliever 那么我怎样才能做到这一点。我的表中有贷款编号,对于给定的公司和分支机构来说,它应该是唯一的整数。
-
如果我们假设没有任何行被删除(你的代码已经这样做了,否则如果最近的插入被删除,下一个插入将生成相同的“唯一”值)然后只需使用
IDENTITY列,然后按ROW_NUMBER() OVER (PARTITION BY branchid,CompanyId ORDER BY Id)计算贷款编号。
标签: sql sql-server-2008 sql-server-2005 sql-server-2008-r2 sql-server-2012