这就是我想要实现的目标:
因此,当插入具有opp_type = 0的记录时,触发机会表上的触发。
代码的下一部分只是进行计算,即从自定义表中获取最后使用的数字并向其中添加1。在变量中存储新值。
下一部分是插入用户字段。 最后更新自定义表以记录上次使用的数字。
我在NEXTEXP1表中将数字增加1,但是没有通过GUI填充名为O_Quote的用户字段。
下面的代码在上面的解释方面做了它应该做的事情吗?
通过我的触发器中的步骤看起来相同,但用户字段没有填充使用的最后一个数字:
alter TRIGGER [dbo].[Q2] ON [dbo].[AMGR_opportunity_Tbl] AFTER INSERT
AS
BEGIN
Declare @Opp_Type int
Select @Opp_Type = 0 from inserted
If @Opp_Type = 0
BEGIN
SET NOCOUNT ON;
DECLARE @Client_Id varchar(24)
DECLARE @Contact_Number int
DECLARE @NewNumber varchar(250)
DECLARE @NextQNo float
DECLARE @UDFName varchar(50)
DECLARE @GeneratorPrefix varchar(10)
DECLARE @GeneratorLength float
DECLARE @Opptype int
DECLARE @Type_id int
DECLARE @Oppid varchar (24)
--select top 1 nextqno = nextqno from nextexp1
SELECT @NewNumber = NextQno + 1 from dbo.NextEXP1
----insert into user field
insert into O_Quote(Client_Id, Contact_Number, Type_Id, Code_Id, [O_Quote])
values (@Client_Id,0,15,0,@NextQNo)
-------update table with last number used
UPDATE [dbo].[NextEXP1] SET NextQNo = @NewNumber
End
End
GO
答案 0 :(得分:1)
@ Leonidas199x对所有积分都是正确的。我还可以说,有太多的东西不清楚这些问题,而且很多数据都缺失了,但这是我可以建议的(这段代码也处理批量插入):
alter TRIGGER [dbo].[Q2] ON [dbo].[AMGR_opportunity_Tbl] AFTER INSERT
AS
BEGIN
DECLARE @NewNumber varchar(250);
SELECT @NewNumber = MAX(NextQno) FROM dbo.NextEXP1; -- I guess that's what you want
insert into O_Quote(Client_Id, Contact_Number, Type_Id, Code_Id, [O_Quote])
select Client_Id, Contact_Number, Type_Id, Code_Id, @NewNumber + row_num
FROM (
SELECT Client_Id, -- once again do not know where this value is taken from
0 Contact_Number,
15 Type_Id,
0 AS Code_Id,
ROW_NUMBER() OVER(order by client_id) row_num
FROM INSERTED WHERE Opp_Type = 0 --I guess that's the right column name
) a;
SELECT @NewNumber = MAX(O_Quote) FROM O_Quote;
UPDATE [dbo].[NextEXP1] SET NextQNo = @NewNumber;
END
答案 1 :(得分:0)
考虑到这一点,我认为你的逻辑有点偏差:
从插入
中选择@Opp_Type = 0
这将始终评估为0。
您想使用:
SELECT @Opp_Type = i.Opp_Type
FROM inserted AS i;
i.Opp_Type
是您的列名。
其次,您声明了一堆变量,但从未设置它们:
DECLARE @Client_Id varchar(24)
DECLARE @Contact_Number int
DECLARE @NewNumber varchar(250)
DECLARE @NextQNo float
DECLARE @UDFName varchar(50)
DECLARE @GeneratorPrefix varchar(10)
DECLARE @GeneratorLength float
DECLARE @Opptype int
DECLARE @Type_id int
DECLARE @Oppid varchar (24)
然后继续插入它们。如果您想稍后使用它们,则需要设置它们。应该是:
insert into O_Quote(Client_Id, Contact_Number, Type_Id, Code_Id, [O_Quote])
values (@Client_Id,0,15,0,@NewNumber)
或者您需要将@NextQNo设置为:
SELECT @NextQNo = NextQno from dbo.NextEXP1;
SELECT @NewNumber = @NextQNo + 1;
最后,如果一次插入多条记录,写入方式会导致问题。你需要考虑一个循环来获得那个不理想的MaxID。你能看一下使用IDENTITY列吗?