0

次の表がある状況があります。

    create table Bulk_Data
    (
    id int identity(1,1),
    UserName varchar(100) not null default 'default value ',
    iPartitionID int null
    )

また、Bulk_Data に挿入トリガーがあります。

create trigger dbo.Bulk_Data_IU on Bulk_Data 
AFTER INSERT  
AS Begin

    Merge Bulk_Data p1 
    using Bulk_Data p2 on p1.id = p2.id
    when matched then 
        update set p1.iPartitionID = right(p2.id,1);

end

上記の表の条件は、値に依存しない3つの列があるようなものです。1] id は ID 自動インクリメント列です 2] UserName はデフォルト値に設定されます 3] iPartitionID はトリガーの挿入に基づいています。

だから私の質問は、レコードをどのように挿入すればよいかということです。たとえば、#2、つまり列 2 に値を挿入する必要がないと仮定すると、テーブルで挿入コマンドをどのように起動すればよいでしょうか。

挿入トリガーを作成したので、挿入コマンドは私にとって重要だからです。

私が走るとき

insert Bulk_Data(UserName) values('Suraj Sheikh')

それは正常に動作しますが、UserName を挿入したくない場合はどうなりますか。

これは可能ですか?

ここで私を助けてください。

4

2 に答える 2

2

挿入ごとにすべての行を更新するトリガーの代わりに、計算列を使用できます。

create table Bulk_Data
    (
    id int identity(1,1),
    UserName varchar(100) not null default 'default value ',
    iPartitionID as id % 10 persisted
    )
于 2012-05-14T16:37:02.963 に答える
1

「AFTERINSERT」トリガーを使用するのではなく、「InsteadOF」トリガーを使用します。

INSTEAD-OFトリガーは、SQLServerの非常に強力なオブジェクトです。これにより、開発者はデータベースエンジンを迂回させて、ユーザーがやろうとしていることとは異なることを行うことができます。

このように、そのテーブルで挿入クエリが実行されると、挿入は行われず、トリガーに書き込まれたステートメントはすべて実際にdbに適用されます。

制限-INSTEADOFDELETE / UPDATEトリガーは、DELETE / UPDATEアクションのカスケードが定義された外部キーを持つテーブルでは定義できませんが、InsertTriggerは定義できます。

于 2012-05-14T14:39:40.520 に答える