我想是这句出错:WHERE ID=(select ID from Inserted)
出错的原因是ID是一个值,而Select ID from Inserted有可能是多个值。
所以你可以这样试试(代码我没测试过)CREATE TRIGGER mytrigger  ON tableone 
FOR INSERT,UPDATE
AS
IF (Select COUNT(*) FROM DELETED)>1 
  BEGIN
    RAISERROR ('不能一次操作多条记录!', 16, 1)
    ROLLBACK TRAN
    RETURN
  END
DECLARE @order VARCorderR(200), @line smallint,@a varcorderr(30),
@sql varcorderr(300),@ID INT
SELECT @ID=ID FROM INSERTEDSELECT  @order=tableone.order,@line=tableone.line
FROM tableone 
where ID=@ID
if (CorderRINDEX("get",@order)>0 )and(@line=1)
begin
   set @a = host_name()
   set @sql = '''net send ' + @a + '非法命令'''
   exec('master.dbo.xp_cmdshell ' + @sql )
end

解决方案 »

  1.   

    的确是触发器引起的,
    在用net send 之前,
    我是用raiserror来返回
    信息的,都不会有此问题,yujohny(踏网无痕) 的方法我先试试看
      

  2.   

    yujohny(踏网无痕) 提供的方法不行啊,
    顺便说一下,那个错误信息框是在受到
    net send 发出的消息后几乎同时弹出的
      

  3.   

    将倒数第二行
       exec('master.dbo.xp_cmdshell ' + @sql )
    删除后,一切正常,
    看来这是问题所在了
      

  4.   

    我知道错误了,触发器里面不能返回这样的结果
    就比如触发器里面放了select '1234' 这样的语句,前台运行都会出错的