を更新します。作業を継続する必要があるデータベースを使用するレガシーソフトウェアのかなり多くもあり、つまり私は、既存のデータベース表、procsの、などを維持したいと思いますINSTEAD OF UPDATEトリガと新しいソフトウェアを開発しながら、私は、既存のデータベースに変更を作っています主キー
現在、私が持っているテーブル
CREATE TABLE dbo.t_station ( tx_station_id VARCHAR(4) NOT NULL, tx_description NVARCHAR(max) NOT NULL, tx_station_type CHAR(1) NOT NULL, tx_current_order_num VARCHAR(20) NOT NULL, PRIMARY KEY (tx_station_id) )
このテーブルには、プラント(生産施設)を参照する新しいフィールドを追加し、tx_current_order_numを別のテーブルに移動する必要があります。これは、すべての行で必須ではないためです。だから私は、作成した新しいテーブル: - 私はビューにdbo.t_stationテーブルを変更してまで、トリガの代わりに提供することを決定したので、今
CREATE TABLE Private.Plant ( PlantCode INT NOT NULL, Description NVARCHAR(max) NOT NULL, PRIMARY KEY (PlantCode) ) CREATE TABLE Private.Station ( StationId VARCHAR(4) NOT NULL, Description NVARCHAR(max) NOT NULL, StationType CHAR(1) NOT NULL, PlantCode INT NOT NULL, PRIMARY KEY (StationId), FOREIGN KEY (PlantCode) REFERENCES Private.Plant (PlantCode) ) CREATE TABLE Private.StationOrder ( StationId VARCHAR(4) NOT NULL, OrderNumber VARCHAR(20) NOT NULL, PRIMARY KEY (StationId) )
は、私は2つの場所で同じデータを持っている必要はありませんDELETE、INSERT、およびUPDATEを実行します。私は[ほとんどの]彼らが働いている問題はない。
私の質問は、複数の行に主キー列(tx_station_id)とアップデートの更新、INSTEAD OF UPDATEトリガを考えています。私は「更新主キーの後に」「更新前の主キー」とを知っているように、
トリガーブロック内、挿入、削除[擬似]テーブルを結合する方法はありますか?このような何か...
UPDATE sta SET sta.StationId = ins.tx_station_id FROM Private.Station AS sta INNER JOIN deleted AS del INNER JOIN inserted AS ins ON ROW_IDENTITY_OF(del) = ROW_IDENTITY_OF(ins) ON del.tx_station_id = sta.StationId
この段階では、主キー列が更新され、複数の行を挿入してあり、または削除された場合、私は、更新をロールバックし、トリガーブロックにチェックを入れてきました、テーブル。
私は誰かがより良い答えを得ようと考えていました!この問題は過去にも私を困らせました。 –