我有一个调用存储过程的SQL触发器。像这样的东西
Alter TRIGGER [dbo].[MyTrigger]
ON [dbo].[MyTable]
AFTER INSERT, UPDATE
AS
BEGIN
-- Some t-sql
-- Call Stored Procedure
exec MyProc
END
现在问题是过程MyProc
返回一个结果集,这是系统其他部分所需要的,但我不希望在通过此触发器执行此过程时返回结果集,因为每当我在MyTable
更新/插入时,结果集都会返回,这是创建了触发器的表格,并且每次更新/插入时我都不想要该结果集。 / p>
那么是否有任何可能的解决方案忽略触发器执行返回的结果集?我已经考虑过将一个位参数传递给MyProc
的解决方案,指示是否通过触发器调用它,如果该位为1(意味着通过触发器调用),我不会从程序返回结果集,但这个解决方案正在影响触发器和程序两者,我想要的东西只能从触发器完成,而不需要触及程序。
答案 0 :(得分:2)
如果您的存储过程总是只返回一个集合,则可以将其插入临时表中来禁止它。
示例存储过程:
ALTER PROCEDURE [MyProc]
AS
BEGIN
SELECT getdate() as today;
END
您的触发器应如下所示:
Alter TRIGGER [dbo].[MyTrigger]
ON [dbo].[MyTable]
AFTER INSERT, UPDATE
AS
BEGIN
-- Some t-sql
-- Call Stored Procedure
CREATE TABLE #myproc_tmp (
today datetime
)
INSERT INTO #myproc_tmp
Exec MyProc
END
重要提示 - 如果存储过程的返回结果集结构发生更改,则必须编辑触发器。此外,如果过程返回大量数据,它将通过插入#myproc_tmp表消耗额外的服务器资源。 最后,如果SP返回具有不同结构的多组数据,INSERT INTO命令将抛出错误。