61

私はこのようなテーブルを持っています:

|UserId   |  ContactID |  ContactName 
---------------------------------------
| 12456   |  Ax759     |  Joe Smith
| 12456   |  Ax760     |  Mary Smith
| 12458   |  Ax739     |  Carl Lewis
| 12460   |  Ax759     |  Chuck Norris
| 12460   |  Bx759     |  Bruce Lee

ユーザーが連絡先 ID を重複させないように、このテーブルに制約を追加する必要があります。ユーザーはさまざまな外部システムからデータをインポートしているため、ContactId は全面的に一意ではなく、ユーザーごとに一意になります。

単一の列に基づいて Unique 制約と Non-Null 制約を作成する方法は知っていますが、2 つの列にまたがる Unique 制約を作成するにはどうすればよいですか?

4

5 に答える 5

68

これを試すことができます:

CREATE UNIQUE CLUSTERED INDEX index_name ON TABLE (col1,col2)

また

CREATE UNIQUE NONCLUSTERED INDEX index_name ON TABLE (col1,col2)

また

ALTER TABLE [dbo].[TABLE] ADD CONSTRAINT
    UNIQUE_Table UNIQUE CLUSTERED
    (
       col1,
       col2
    ) ON [PRIMARY]
于 2009-07-10T13:47:43.790 に答える
42

フィールドに一意の制約を追加できます。

ALTER TABLE YourTable
ADD CONSTRAINT UQ_UserId_ContactID UNIQUE(UserId, ContactID)
于 2009-07-10T13:49:02.960 に答える
6

試すことができALTER TABLE [TABLE_NAME] ADD UNIQUE (column1,column2,column3 ...columnN)ます。

これが乾杯に役立つことを願っています。

于 2011-07-05T07:13:15.797 に答える
3
CREATE TABLE [LineItems](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [OrderID] [int] NOT NULL,
    [LineItemNumber] [int] NOT NULL,
 CONSTRAINT [PK_LineItems] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
),
 CONSTRAINT [UC_LineItems] UNIQUE NONCLUSTERED 
(
    [OrderID] ASC,
    [LineItemNumber] ASC
)
)
于 2009-07-10T13:51:02.710 に答える
3

一意の INDEX ではなく、一意の CONSTRAINT を作成するための構文を次に示します。

ALTER TABLE publishers 
  ADD CONSTRAINT uqc_pub_name 
  UNIQUE (pub_name)

列の一意性を確保するために使用する方法によって、微妙な違いがあることに注意することが重要です。

これらの興味深いウォークスルーについては、次の MSDN リファレンスを参照してください。

http://msdn.microsoft.com/en-us/library/aa224827(SQL.80).aspx

于 2009-07-10T13:55:38.383 に答える