コンマで区切られた文字列として渡されるアドレス情報を解析しようとしています。私は、私の知る限り、この擬似サンプルにT-SQLトリガーで新しいバッチレコードのみを更新します
CREATE TRIGGER aftInsParseAddress
AFTER INSERT
AS
DECLARE @address VARCHAR(100),
@city VARCHAR(100),
@stateZip VARCHAR(100),
@source varchar(100),
@state varchar(2) ,
@zip varchar(5),
@country1 varchar(10) ,
@country varchar(3)
SET @source = (SELECT AddressSourceA
FROM table
WHERE ID = 'GUID-GUID-GUID-GUID-GUID' AND Exported = 0)
SELECT
@address = LEFT(@source, CHARINDEX(',', @source) - 1),
@city = (SUBSTRING (@source, CHARINDEX(',', @source) + 2 ,
CHARINDEX(',', @source, CHARINDEX(',', @source) + 1) - LEN(LEFT(@source, CHARINDEX(',', @source))) -2)),
@stateZip = SUBSTRING(@source, CHARINDEX(',', @source, LEN(@city) + LEN(@address)), 10),
@state = (SUBSTRING(@stateZip, 3 ,4)),
@zip = (SUBSTRING(@stateZip, 6, 9)),
@country1 = (SUBSTRING(@source, (CHARINDEX(',', @source, LEN(@address) + LEN(@statezip) + LEN(@city))), 5)),
@country = (SUBSTRING(@country1, 3, 7))
UPDATE SameTableInsertedInto
SET Address = @address, City = @city,
State = @state, Zip = @zip,
Country = @country
WHERE id IN (SELECT ID FROM inserted);
を使用して必要な情報をダウン解析するように私は私の@source =「1600ペンシルベニアアベニューNW、ワシントンD.C. 20500、USA」などの文字列で始まるでしょう
を得ています値で終わるは私は作成者が彼らの端にアドレスを解析できないことをWebフォームからこのデータをインポートしていますすなわち
1600 Pennsylvania Ave NW
Washington
DC
20500
USA
それらを必要とする方法を解析されました。結果として、私は各アドレスフィールドをそれ自身の変数に分割する必要があります。私はこれを行うサンプルを構築し、挿入後にトリガーでこれを実装しようとした後、宛先テーブルの同じフィールドを更新しました。
1レコードを正常に起動するためのサンプルを作成することができますが、より多くの場合、複数のレコードをインポートすることになります。私は私のジレンマを修正するために、これで次に頭を付けるべきか分からない。ストアドプロシージャまたは関数内のデータを解析する必要がありますか?
注意することも重要です。テーブルにレコードを挿入し、新しい値が入る同じテーブル内の値を更新した後、このトリガを実行しようとしています。
ありがとうございました!
['INSERTED'テーブルは複数の行を持つことができます](https://docs.microsoft.com/en-us/sql/relational-databases/triggers/create-dml-triggers-to-handle-multiple-rowsそのデータを処理するためにトリガーを修正する必要があります。 解析ロジックを[インラインテーブル値関数]に入れることをお勧めします。(https://technet.microsoft.com/en-us/library/ms189294(v=sql.105).aspx)懸念の分離が役立ちます。 –
さらに、トリガで長時間の文字列操作を行うことはお勧めできません.... –
トリガで実行するのではなく、あとでスケジュールされたprocでバッチ処理することをお勧めします。トリガのエラー(およびダーティデータの部分文字列を使用すると、エラーが発生することはほとんどありません)は、レコード全体の挿入に失敗します。あなたはそれが起こることを望んでいません。 –