このようなテーブルがあります:
|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は全体的に一意ではなく、ユーザーごとに一意になります。
単一の列に基づいて一意の制約と非NULLの制約を作成する方法は知っていますが、2つの列にわたって一意の制約を作成するにはどうすればよいですか?
これを試すことができます:
CREATE UNIQUE CLUSTERED INDEX index_name ON TABLE (col1,col2)
or
CREATE UNIQUE NONCLUSTERED INDEX index_name ON TABLE (col1,col2)
または
ALTER TABLE [dbo].[TABLE] ADD CONSTRAINT
UNIQUE_Table UNIQUE CLUSTERED
(
col1,
col2
) ON [PRIMARY]
フィールドに一意の制約を追加できます。
ALTER TABLE YourTable
ADD CONSTRAINT UQ_UserId_ContactID UNIQUE(UserId, ContactID)
ALTER TABLE [TABLE_NAME] ADD UNIQUE (column1,column2,column3 ...columnN)
を試すことができます。
これが元気づけられることを願っています。
一意の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
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
)
)