我想是这句出错: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
出错的原因是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
在用net send 之前,
我是用raiserror来返回
信息的,都不会有此问题,yujohny(踏网无痕) 的方法我先试试看
顺便说一下,那个错误信息框是在受到
net send 发出的消息后几乎同时弹出的
exec('master.dbo.xp_cmdshell ' + @sql )
删除后,一切正常,
看来这是问题所在了
就比如触发器里面放了select '1234' 这样的语句,前台运行都会出错的