CREATE TRIGGER AAC ON [dbo].[DCSIBA] 
FOR INSERT, UPDATE
AS 
IF exists(SELECT *  from inserted where IBA021='')
BEGIN 
ROLLBACK
RAISERROR('客户单号不能为空',16,1)
END
以上触发器代码是用来录入订单时,客户单号这个字段不能为空的功能提醒
可实际应用中当客户单号字段为空时,系统提醒的是'此笔信息已被异动' 不是我想要提醒的内容'客户单号不能为空'2、在以上的触发器能不能实现当‘客户单号这个字段不能为空的功能提醒’后 不要把该已录好单据的信息清空,只要补录相应的数据就可以了谢谢!

解决方案 »

  1.   

    用 INSTEAD OF 触发器.
      

  2.   

    参考:
    http://blog.csdn.net/qianjin036a/archive/2011/01/13/6136588.aspx
      

  3.   

    改成
    CREATE TRIGGER AKEA ON [dbo].[DCSIBA] 
    INSTEAD OF INSERT,UPDATE
    AS 
    BEGIN 
    IF exists(SELECT *  from inserted where IBA021='')
    SELECT '客户单号不能为空'
    END还是老样子
      

  4.   

    如果是用程序写客户端的话,用了select ,可以从客户端获得记录集的.
      

  5.   

    use tempdb
    Go
    if object_id('DCSIBA') Is Not Null
    Drop Table DCSIBA
     
    Create Table DCSIBA
    (
    IBA021 nvarchar(50)
    )GO
    create trigger AKEA On DCSIBA  for Insert,update 
    As
    Begin  IF exists(SELECT * from inserted where IBA021='')
    Begin
    Raiserror('客户单号不能为空',16,1)
    End 
    End
    Go 
    --test
    Set implicit_transactions on
    Declare @error nvarchar(50)
    Insert Into DCSIBA(IBA021) values('')If @@ERROR >0
    Rollback TranSet implicit_transactions offGo
    /*
    訊息 50000,層級 16,狀態 1,程序 AKEA,行 7
    客户单号不能为空
    */
      

  6.   

    use tempdb
    Go
    if object_id('DCSIBA') Is Not Null
    Drop Table DCSIBA
     
    Create Table DCSIBA
    (
    IBA021 nvarchar(50)
    )GO
    create trigger AKEA On DCSIBA  for Insert,update 
    As
    Begin  IF exists(SELECT * from inserted where IBA021='')
    Begin
    Raiserror('客户单号不能为空',16,1)
    Rollback
    Begin Tran
    End 

    End
    Go 
    --testInsert Into DCSIBA(IBA021) values('')
    Go
    /*
    訊息 50000,層級 16,狀態 1,程序 AKEA,行 7
    客户单号不能为空
    */上面腳本應用于Microsoft SQL Server 2005 - 9.00.4035.00
    不同的SQL Server 版本,可能會有不同的應用。
      

  7.   

    begin
    rollback
    raiserror 20009 '库存明细不允许批量插入!'
    return 
    end
     
    试试
      

  8.   

    老兄,你那是在查询分析器上运行的,当然是OK 
    可我是要针对软件ERP上的单据,所以还是要谢谢你
      

  9.   

    2、在以上的触发器能不能实现当‘客户单号这个字段不能为空的功能提醒’后 不要把该已录好单据的信息清空,只要补录相应的数据就可以了
    --下面的ROLLBACK去掉,就不会清空数据了,可在下面的代码中补录,也可以程序中执行补录CREATE TRIGGER AAC ON [dbo].[DCSIBA]  
    FOR INSERT, UPDATE
    AS  
    IF exists(SELECT * from inserted where IBA021='')
    BEGIN  
    ROLLBACK
    RAISERROR('客户单号不能为空',16,1)
    END