我 需要一些代码建议,
在打印出优惠时,我们的ERP程序会在表格中生成一个ID号码" Angebot"在格式AYYNNNNN中,此掩码在管理设置中设置,但它也有一个选项来覆盖此数字并设置一个手动,这会导致很多麻烦,因为人们往往会破坏ID计数器。
我想创建一个触发器,当id号格式不正确时发送消息,因此我必须检查该特定列是否正确。
if状态会检查以下内容:
if (Angebotsnr NOT LIKE 'A'+RIGHT(DATEPART(yy,getdate())+'_____') then RAISEERROR
数据库中已经存在一个检查其他东西的触发器,所以我只需要添加第二个检查以确保它是正确的,但是我将把if语句放在哪里以及如何检查它? / p>
这是现有触发器的代码:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[ANGEBOT_ITrig] ON [dbo].[Angebot] FOR INSERT AS
SET NOCOUNT ON
/* * KEINE EINFÜGUNG BEI FEHLEN EINES PASSENDEN SCHLÜSSELS IN 'ErlGrp' */
IF (SELECT COUNT(*) FROM inserted) !=
(SELECT COUNT(*) FROM ErlGrp, inserted WHERE (ErlGrp.ABTNR = inserted.ABTEILUNG))
BEGIN
RAISERROR ( 'Some error statement',0,0)
ROLLBACK TRANSACTION
END
操作将是相同的,只是使用不同的错误消息。 有人能指出我正确的方向。
感谢。
答案 0 :(得分:0)
我会在执行插入的过程中处理此问题,因此它不会插入并触发其他触发器。
create proc myInsertProc (@ID char(8))
as
begin
--copied from you, but it's missing part of the right function
if (Angebotsnr NOT LIKE 'A'+RIGHT(DATEPART(yy,getdate())+'_____')
begin
raiserror('You provided a wrongly formatted ID',16,1) with log
return
end
...continue on with other code
end
这将引发错误,并将其写入SQL Server错误日志。如果您不想要,可以删除with log
。 return
结束批处理。如果你是
我个人在IF
区块使用此功能。
if (Angebotsnr NOT LIKE 'A' + right(convert(varchar,DATEPART(year,getdate())),2) + '%' or len(Angebotsnr) != 8)