2017-11-01 1 views
1

ユーザーがSQL Server管理スタジオから直接テーブルを変更した場合にのみ、トリガを実行できるかどうか。しかし、テーブルの実行のアプリケーションフローによって影響を受けます。ユーザーがSSMSを介して直接テーブルに影響を及ぼす場合にのみトリガーを実行する方法。ストアドプロシージャの実行時ではない

私の目的は、テーブルの開発者が手動で行った変更を追跡することです。

+0

開発者は「カジュアル」か「悪意のある」か?私。データベースにアクセスするすべてのものが良好であればいくつかのことができますが、違いがどのように検出されたかを知ることで、開発者が回避できないようなことをしようとするとかなり複雑になります。 –

+0

開発者がDISABLE TRIGGERを実行できないようにするにはどうすればよいですか? –

+0

@Damien_The_Unbeliever: - 彼らはカジュアルな開発者ですが、時には開発者がテーブルに変更を加え、顧客に柔軟に対応しなければなりません。年末や月末にレポートに値の不一致が生じることがあります。すべてのリレーショナル表で使用できます。私は、追加のテーブルまたはアーカイブテーブルで更新前と更新後のレコードを保持したいだけです。 – Bala

答えて

0

あなたは、トリガー

UPDでAPP_NAMEをチェックすることができます。例

CREATE TABLE mytab (
    id int PRIMARY KEY, 
    name nvarchar(50) 
) 
GO 

CREATE OR ALTER TRIGGER mytab_on_insert ON mytab INSTEAD OF INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 
    IF APP_NAME() = 'Microsoft SQL Server Management Studio - Query' 
    BEGIN 
    INSERT INTO mytab (id, name) SELECT id, name FROM inserted 
    END 
END 
GO 

は今SSMSからこれらのステートメントを実行します。

INSERT INTO mytab (id, name) VALUES (1, 'Value 1') 
SELECT * FROM mytab 

id   name 
----------- -------------------------------------------------- 
1   Value 1 

(1 row affected) 

今すぐトリガーdoesnのsqlcmdの

INSERT INTO mytab (id, name) VALUES (2, 'Value 2') 
SELECT * FROM mytab 

から実行予想されるように行を挿入

SQL Serverの戻り挿入しない行とSELECTは同じ結果を返します。

+1

任意のアプリケーション名追加接続パラメータを使用してSSMSから指定できます。 \t \t INSERT INTO TEST_TABLEのVALUES(1) - (APP_NAME()= 'クエリのMicrosoft SQL Server Management Studioの')場合、私は として挿入 AFTER tbl_dep_itran_header ONこの 'ALTER TRIGGER Trigger_Test ようにしようとした –

+0

@sergeは \tを開始します\t Else \t \t Test_Tableへの挿入VALUES(2) END 'です。私は私のアプリケーションを通して取引をするとき。大文字小文字が合った場合。私はレコードをアプリケーションに挿入するためにストアドプロシージャを使用します。 – Bala

+0

ストアドプロシージャで試しましたか? – serge

関連する問題