ユーザーがSQL Server管理スタジオから直接テーブルを変更した場合にのみ、トリガを実行できるかどうか。しかし、テーブルの実行のアプリケーションフローによって影響を受けます。ユーザーがSSMSを介して直接テーブルに影響を及ぼす場合にのみトリガーを実行する方法。ストアドプロシージャの実行時ではない
私の目的は、テーブルの開発者が手動で行った変更を追跡することです。
ユーザーがSQL Server管理スタジオから直接テーブルを変更した場合にのみ、トリガを実行できるかどうか。しかし、テーブルの実行のアプリケーションフローによって影響を受けます。ユーザーがSSMSを介して直接テーブルに影響を及ぼす場合にのみトリガーを実行する方法。ストアドプロシージャの実行時ではない
私の目的は、テーブルの開発者が手動で行った変更を追跡することです。
あなたは、トリガー
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は同じ結果を返します。
任意のアプリケーション名追加接続パラメータを使用して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 ようにしようとした –
@sergeは \tを開始します\t Else \t \t Test_Tableへの挿入VALUES(2) END 'です。私は私のアプリケーションを通して取引をするとき。大文字小文字が合った場合。私はレコードをアプリケーションに挿入するためにストアドプロシージャを使用します。 – Bala
ストアドプロシージャで試しましたか? – serge
開発者は「カジュアル」か「悪意のある」か?私。データベースにアクセスするすべてのものが良好であればいくつかのことができますが、違いがどのように検出されたかを知ることで、開発者が回避できないようなことをしようとするとかなり複雑になります。 –
開発者がDISABLE TRIGGERを実行できないようにするにはどうすればよいですか? –
@Damien_The_Unbeliever: - 彼らはカジュアルな開発者ですが、時には開発者がテーブルに変更を加え、顧客に柔軟に対応しなければなりません。年末や月末にレポートに値の不一致が生じることがあります。すべてのリレーショナル表で使用できます。私は、追加のテーブルまたはアーカイブテーブルで更新前と更新後のレコードを保持したいだけです。 – Bala