2

あるテーブルのデータを、2 列のキーを持つテーブルに挿入しようとしています。ソース テーブルは宛先のキーを共有しません。宛先の両方のキー列は varchar です。

私は挿入ステートメントを持っています:

INSERT INTO Table1 (Invoice, DetailLine, SomeData1, SomeData2) 
SELECT ('1'+RIGHT('00000000000000' + CONVERT(varchar, DatePart(ns,SYSDATETIME()), 14), 0, 'STARTING_VALUE_1407', [ActualValue] 
FROM Table2;

上記を実行すると、DateTime2 オブジェクトのミリ秒は、その値を 1 回だけ評価しているかのように、すべて同じになります。これにより、これを一時的な一意のキーとして使用できなくなります。SELECT ステートメントで SYSDATETIME() またはその他の日付関数を使用して、行ごとに値を再評価することはできますか? そうでない場合、通常は宛先テーブルのキーを共有しないデータを選択するときに INSERT INTO SELECT を実行するときに一意の値を生成する方法はありますか?

4

2 に答える 2

1

ミリ秒に関連付ける必要があるかどうか、または同じ行で値を同じにする必要があるかどうかはわかりませんが、次を使用して一意にすることができます。

SELECT NEWID() AS GuidNo1, 
       NEWID() AS GuidNo2 

または

SELECT CAST(RAND() * 1000000 AS INT) AS [RandomNumber1], 
       CAST(RAND() * 1000000 AS INT) AS [RandomNumber2] 
于 2014-09-23T14:55:02.217 に答える