テーブルのフィールドを繰り返し処理し、その値がデフォルト値と等しくない場合は何かをする必要があります。
私はトリガーにいるので、テーブル名を知っています。次に、このループを使用して各フィールドをループします。
select @field = 0, @maxfield = max(ORDINAL_POSITION) from
INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName
while @field < @maxfield
begin
...
次に、ループを介して各反復でフィールド名を取得できます。
select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = @TableName
and ORDINAL_POSITION = @field
そして、その列のデフォルト値を取得できます。
select @ColDefault = SUBSTRING(Column_Default,2,LEN(Column_Default)-2)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE Table_Name = @TableName
AND Column_name = @fieldname
必要なものはすべて揃っていますが、2 を比較する方法がわかりません。フィールド名を定数として持っていないため、変数内にのみあるため、' から値を取得する方法がわかりません。挿入されたテーブル(トリガーにいることを思い出してください)がデフォルト値と同じかどうかを確認します(現在、@ColDefaultにvarcharとして保持されています)。