gar*_*rik 3 trigger sql-server-2008
TableX 可以通过两种方式修改:
如何在tableX的触发器中确定客户端的调用方式(直接或存储过程)
谢谢你。
你无法确定。您可以使用的只是 INSERTED 和 DELETED 表。你可能会作弊,但这是一个令人眼花缭乱的血腥黑客。定义一个带有“额外”列的视图,它是什么并不重要。您所有的 proc 插入/更新都为该列分配一个值,直接更新提供不同的(或不存在的值)。在该视图上创建一个而不是触发器,然后根据源标志执行更新逻辑
CREATE VIEW dbo.vwTableX
AS
SELECT
X.*
, 'T' AS fake_source_column
FROM
dbo.tableX X
GO
CREATE TRIGGER insertHack ON dbo.vwTableX
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON
IF EXISTS (SELECT * FROM INSERTED I WHERE I.fake_source_column = 'P')
BEGIN
-- perform logic for PROC sourced data
INSERT INTO
dbo.tableX
SELECT
I.col1
, I.col2
-- everything but our fake column
FROM
INSERTED I
WHERE
I.fake_source_column = 'P'
END
IF EXISTS (SELECT * FROM INSERTED I WHERE I.fake_source_column = 'D' OR I.fake_source_columns IS NULL)
BEGIN
-- perform logic for direct access data
INSERT INTO
dbo.tableX
SELECT
I.col1 * 2 -- or whatever special logic you wish to apply
, I.col2
-- everything but our fake column
FROM
INSERTED I
WHERE
I.fake_source_column = 'D' OR I.fake_source_columns IS NULL
END
END
GO
-- lather, rinse, repeat for update and/or delete trigger
Run Code Online (Sandbox Code Playgroud)
所以这是一个解决方案,但实际上,您要解决的问题是什么?你为什么关心 DML 是来自 proc 还是非 proc?