2つの列IDとdescを持つdbo.mtestUniqueというテーブルがあります。このテーブルにデータを挿入する2つのプロセスがあります。同じ時間に、重複する値を挿入してユニークなインデックスに違反することを避けるにはどうすればよいですか?SQL Server 2014 - 並列プロセス一意インデックスを持つテーブルに同じ値を挿入
は存在しません。左結合は機能しません。
CREATE TABLE mtestUnique
(
id INT ,
[DESC] varchar(50),
UNIQUE([DESC])
)
、その後、SSMS上の2つの異なるクエリに次のスクリプトを実行します:あなたは、テストデータベースにテーブルを作成することができ、これを複製する
。
SET XACT_ABORT ON;
DECLARE @time VARCHAR(50)
WHILE (1=1)
BEGIN
IF OBJECT_ID('tempdb..#t') IS NOT NULL
DROP TABLE #t
SELECT @time = CAST(DATEPART(HOUR , GETDATE()) AS VARCHAR(10)) + ':' + RIGHT('00' +CAST(DATEPART(MINUTE , GETDATE())+1 AS VARCHAR(2)),2)
SELECT MAX(id) + 1 id , 'test' + @time [DESC]
INTO #t
FROM dbo.mtestUnique
-- to insert as exact same time
WAITFOR TIME @time
INSERT INTO dbo.mtestUnique
(id, [DESC])
SELECT *
FROM #t t
WHERE NOT EXISTS (
SELECT 1
FROM dbo.mtestUnique u
WHERE u.[DESC] = t.[Desc]
)
END
私はTRANに挿入しても運はありません。
ご協力いただきありがとうございます。
ID列で[ID](https://msdn.microsoft.com/en-us/library/ms186775.aspx)を使用できますか? – SMM
どのように役立つでしょうか? – user3951476
独自のdescが必要な場合は、時間だけでなくユニークなdescを作成します。たとえば、を使用します。 NEWID()または現在のsession_ID +時間。 – Anton