1

毎晩いくつかの異なるテーブルからプル データを使用するクエリがあり、このプルは、クラウド サーバーにロードされる upsert テーブルに入ります。各行にある種の一意の識別子/主キーを設定しようとしていますが、問題があります。

SELECT SUBSTRING(CAST(NEWID() AS varchar(38)), 1, 16)

クエリを再実行するたびに、NEWID()毎回の値が変更されるため、レコードを更新する代わりに、毎晩テーブルに重複が読み込まれます。newid()クエリを実行するたびに静的な値を保持できる方法はありますか?

ありがとう、レイチェル

4

2 に答える 2

2

NEWID()これは、(コンピューターに対して) 一意の GUID 値を返すように設計されています。走るたびに

SELECT NEWID()

別の値が表示されます。

UPSERT コードでは、ソース テーブルのデータを主キーに結合する必要があるようです。この主キーは、特定の行を挿入または更新する必要があるかどうかを判断するために、将来的に確実に使用できます。

于 2013-10-02T15:51:28.763 に答える
0

NEWID() は、呼び出されるたびに一意の値を返します。これは主キーとして最適な選択ではありません。ほとんどのデータ プロフェッショナルは、可能であればクラスター化された主キーに int ID を使用することを好みます。

あなたの場合、アイデンティティと NEWID() の両方が新しい値を返すため、どちらのソリューションも完全には機能しません。行が重複しており、挿入する代わりに更新する必要があるかどうかを決定する列を特定する必要があります。これを行うには、mergeステートメントを使用します。

于 2013-10-02T16:01:20.060 に答える