既存のSQL Serverデータベーステーブルにタイムスタンプ列(datetime2
)を追加する必要があります。私が列を作成し、getdate()
をデフォルト値として使用すると、重複した値が得られます。 datetime2は高精度なレベルを持っているので、それを排除すると思った。エンジンは、私がしたいと思うほど速すぎるかもしれません。SQL Serverでは、レコードを含むテーブルを変更し、各行に一意のdatetime2列を追加するにはどうすればよいですか?
私はINSERT SELECT
を使用することはできません。テーブル間に同じ数の列を配置する必要があるからです。前の表には元の問題であるdatetime2が必要なので、私はSELECT INTO
を実行できません。私はまた、私が列を作成したのと同時にインデックスを作成しようとしました。重複がインデックスの前に作成され、インデックスが重複を許可しないように設定されているため、できませんでした。私は試した。これらは失敗しました。
テーブルを変更して新しいdatetime2列を追加し、getdate()(またはその他の日付/時刻関数)のすべての一意の値を入力するにはどうすればよいですか?
編集:私が試したVamsiさんのコメントに基づいて:
INSERT
SELECT
WAITFOR DELAY '00:00:10.000'
The duplicate key value is (2017-01-17 11:59:03.7030000)
私は重複を得ていたので、私は何か間違ったことをやって受け取ります。
編集:私はこれをしなかったバージルさん(感謝)の回答を笑いに基づいて、
DECLARE @dt datetime2(7),
@dt2 datetime2(7),
@create_dt datetime2(7)
declare db_cursor cursor for
select create_dt from mytable;
OPEN db_cursor
FETCH NEXT FROM db_cursor
INTO @create_dt
WHILE (@@FETCH_STATUS = 0)
begin
SET @dt = GETDATE()
WHILE @dt = @dt2
BEGIN
WAITFOR DELAY '00:00:00.123'
SET @dt = GETDATE()
END
update mytable set create_dt = @dt where current of db_cursor
set @dt2 = @dt
FETCH NEXT FROM db_cursor into @create_dt
end
close db_cursor
deallocate db_cursor
一つの方法は、nullとしてDATETIME2列を作成列にヌルではないでカラム一旦ユニーク日時値を挿入する遅延機能を使用することで、変化させますnullでない列 – vamsi