0

簡単なトリガーを作成しました:

ALTER TRIGGER [dbo].[idlist_update] ON [dbo].[Store] 
    FOR INSERT, UPDATE 
AS 
BEGIN
    DECLARE @brand varchar(50);
    DECLARE @model varchar(50);
    DECLARE @category varchar(100);
    DECLARE @part varchar(100);

    DECLARE @count int;

    SELECT @count = COUNT(*) FROM inserted;

    SELECT @brand=Brand, @model=Model, @category=AClass, @part=Descript FROM inserted;
    EXECUTE GenerateId_Part @brand, @model, @category, @part;
END

ユーザー (特別なアプリケーションを使用) によって変更された行では問題なく動作しますが、テーブル内のすべての行 (200.000 以上) に適用する必要があります。私は試した:

UPDATE Store SET lastupd={fn NOW()};

しかし、うまくいきません。

4

1 に答える 1

1

あなたが望む構文は次のとおりだと思います:

UPDATE dbo.Store SET lastupd = CURRENT_TIMESTAMP;

ただし、単一の行を挿入または更新するたびにテーブル全体を更新する場合、これは非常に無駄に思えます。その事実を 200,000 回冗長に保存するのではなく、別の場所に 1 回保存してみませんか? 店内の商品ではなく、お店自体の持ち物のようです。

また、トリガーは複数行の操作を適切に処理しないことに注意してください。inserted1 つのステートメントで 2 つの行が挿入された場合、任意の 1 つの行にしか影響を与えないため、この「から変数を割り当てる」トリックを行うことはできません。一部のプラットフォームとは異なり、SQL Server では、トリガーは行ごとではなくステートメントごとに起動します。ストアド プロシージャが何をするかを示していただければ、これを修正することができます。GenerateId_Part

于 2013-03-03T18:10:11.053 に答える