シナリオ:
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の複数の列に一意の制約を作成する