2012-03-06 7 views
0

セルが挿入または更新されるたびにセルをゼロパッドするSQLトリガが必要です。私が更新コマンドでやっているように2つの文字列を一緒に追加するのがベストプラクティスであるかどうか不思議だった。これが最良の方法でしょうか?SQLをトリガして行を更新する

CREATE TRIGGER PadColumnTenCharsInserted ON Table 
AFTER INSERT 
AS 

DECLARE 
    @pad_characters VARCHAR(10), 
    @target_column NVARCHAR(255) 

SET @pad_characters = '0000000000' 
SET @target_column = 'IndexField1' 

IF UPDATE(IndexField1) 
BEGIN 
    UPDATE Table 
    SET IndexField1 = RIGHT(@pad_characters + IndexField1, 10) 
END 

GO 
+1

** **データベースシステムとバージョンは何ですか? ** SQL **は多くのデータベースシステムで使用されている言語である構造化問合せ言語です - SQLはデータベース製品ではありません**このようなものはベンダー固有のものです。使用しているデータベースシステム.... –

答えて

1

あなたのパディングコードは正常です。代わりに、このようなテーブルのすべての行を更新する

UPDATE Table 

が更新トリガーをトリガーだけ行:

UPDATE updated 

また、あなたはまだいくつかの余分なコードを持っています - すべてが@target_columnに関係します。これがINSERTトリガーかUPDATEトリガーかわからないようです。私はAFTER INSERTIF UPDATEを参照してください。

0

つの質問:

  1. あなたは@target_columnで何をしているのか?それを宣言して列名で設定しますが、使用することはありません。後続のSQL文で変数を使用する場合は、EXECUTE()で文をラップするか、sp_executesql()を使用する必要があります。

  2. "UPDATE Table ..."という構文は、更新するテーブルの名前が "Table"であると仮定して、更新ステートメントでは問題ありません。行方不明と思われるものは、ある種のフィルタです。あるいは、その列がテーブル全体のすべての行について更新されることを本当に意図しましたか?
    これを処理する1つの方法は、別の変数を宣言し、更新される行のPKで設定し、where句を使用して更新をその行だけに限定することです。このような何か:

    DECLAREはint型@Id

    SELECT @id = RECORD_ID INSERTED

    FROM

    - RECORD_ID = @id

  3. 私は好きでここにあなたのトリガーの本体

    あなたのパディングコード。それは私によく見えます。

関連する問題