0

SQL Server 2008 データベース テーブルに一意の制約があり、その制約には 4 つの列が含まれています。テスト データを入力しているときに、予期せず一意の制約違反を受け取りました。4 つの列について、数値を入力し、値セットを挿入し、数値をインクリメントしてから繰り返しました (つまり、(1,1,1,1) (2,2,2,2,)... など)。 . 10 になったときに違反が発生しました。ここで数値を入力すると、制約に違反します。次に、「A」という文字だけを入力してみました。また、「A」で始まる単語を挿入しようとしたところ、違反が発生しました。制約で何かを変更する必要がありますか、それとも実際にどのように機能するはずですか?

ALTER TABLE [dbo].[Table] ADD  CONSTRAINT [UC_Table_Column1_Column2_Column3_Column4] 
UNIQUE NONCLUSTERED 
(
    [Column1] ASC,
    [Column2] ASC,
    [Column3] ASC,
    [Column4] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF,    
IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON   
[PRIMARY]
4

1 に答える 1

0

それはうまくいくはずです。実際のテーブル定義は何ですか? あなたの照合は何ですか?

-- Working Example
CREATE TABLE dbo.[Table](
      Column1 VARCHAR(50)
    , Column2 VARCHAR(50)
    , Column3 INT
    , Column4 VARCHAR(25)
);

ALTER TABLE [dbo].[Table] ADD  CONSTRAINT [UC_Table_Column1_Column2_Column3_Column4] 
UNIQUE NONCLUSTERED 
(
    [Column1] ASC,
    [Column2] ASC,
    [Column3] ASC,
    [Column4] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF,    
IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON   
[PRIMARY]

DECLARE @iteration INT = 0;

WHILE @iteration < 20
BEGIN
    INSERT INTO [dbo].[Table]
    SELECT @iteration, @iteration, @iteration, @iteration;

    SET @iteration += 1;
END;

SELECT * FROM [dbo].[Table];
于 2013-03-12T15:55:45.583 に答える