Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
2 つの TIMESTAMP 値を比較し、これらが同じかどうかを返します。
TSEQUAL ( timestamp-expression-1, timestamp-expression-2 )
timestamp-expression-1 TIMESTAMP 値。
timestamp-expression-2 TIMESTAMP 値。
BIT
TSEQUAL 関数は、WHERE 句でのみ使用できます。これは、UPDATE 文の一部として最も一般的に使用されます。
TSEQUAL 関数は通常の 2 つの TIMESTAMP 値の比較に使用できますが、TSEQUAL の目的は、2 つの特殊な Transact-SQL TIMESTAMP 値を比較することでローが他の接続によって変更されたかどうかを判断することにあります。
TSEQUAL を使用するシングルロー の UPDATE 文で、timestamp-expression-1 と timestamp-expression-2 が等しく、このうちの一方が DEFAULT TIMESTAMP で宣言されたカラムを参照しており、ローが最後にフェッチされたときのカラム値をもう一方が参照している場合は、フェッチ後にローが変更されていないため、TSEQUAL は TRUE を返します。別のユーザーがローを変更した場合は、そのタイプスタンプが変更されており、TSEQUAL 関数は FALSE を返します。TSEQUAL 関数がこの場合に FALSE を返すと、UPDATE は実行されません。アプリケーションでは、影響を受けるロー数を @@rowcount などを使用して調べることにより、ローが更新されたかどうかを判断できます。影響を受けるローがない場合は、別のユーザーがローを変更したと想定でき、再フェッチが必要になります。
SQL/2008 ベンダー拡張。
TIMESTAMP カラム Products.LastUpdated を作成し、ローが最後に更新された時刻のタイムスタンプを格納するとします。次の例は、TSEQUAL 関数を使用してローの値を変更します。最後にフェッチされた後でローに変更がない場合にのみ、更新が適用されます。
SELECT LastUpdated into old_ts_value FROM Products WHERE ID = '300';
UPDATE Products SET Color = 'Yellow' WHERE ID = '300' AND TSEQUAL( LastUpdated, old_ts_value );