シナリオ:
SQL Server開発者として作業している場合、名前と名前の列に一意の制約があるdbo.Customerテーブルの作成スクリプトを提供するように求められます。解決策:
SQL Serverの一意性制約は、1つまたは複数の列に作成され、一意の値のみを受け入れるように列を制限します。以下のスクリプトを使用して、複数の列に一意性制約を作成できます。この場合、FirstNameとLastNameです。
USE [YourDatabaseName]
GO
CREATE TABLE [dbo].[Customer](
[FirstName] [varchar](50) NULL,
[LastName] [varchar](50) NULL,
[SSN] VARCHAR(11),
Constraint UQ_Dbo_Customer_FName_LName Unique(FirstName,LastName)
)
--Let's insert some sample data to test Unique Constraint
Insert into dbo.Customer(FirstName,LastName,SSN)
Values(Null,Null,'000-00-0000'),
('Aamir',Null,'000-00-0000'),
(Null,'Aamir','000-00-0000')
,('Aamir','Shahzad','000-00-0001')
,('Raza','M','000-00-0002') 挿入ステートメントに気付いた場合は、First Recordに、FirstNameとLastNameの両方にNull値を入れました。 2番目のレコードでは、名に「Aamir」、姓にNullを使用しました。 3番目のレコードでは2番目のレコードの逆。ここから、一意の制約が両方の列の値に作用していることがわかります。両方の列の結合された値が一意である限り、どちらか一方がnullであっても挿入できます。
姓がNullである別のレコードを挿入したい場合、既存の値とは異なるため、問題なく使用できます。
Insert into dbo.Customer(FirstName,LastName,SSN)
Values('Raza',Null,'000-00-0000') selectクエリを使用してテーブル内のレコードを確認しましょう。
|
| SQLServerテーブルの複数の列に一意の制約を追加する方法 |
Insert into dbo.Customer(FirstName,LastName,SSN)
Values('Raza',Null,'000-00-0000') メッセージ2627、レベル14、状態1、行30UNIQUEKEY制約の違反'UQ_Dbo_Customer_FName_LName'。オブジェクト'dbo.Customer'に重複するキーを挿入できません。重複するキー値は(Raza、
ビデオデモ:SQLServerの複数の列に一意の制約を作成する