sql >> データベース >  >> RDS >> Sqlserver

SQLServerの複数の列に一意の制約を作成する方法-SQLServer/TSQLチュートリアルパート96

    シナリオ:

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


    1. SQLServerの指定された位置にあるリストアイテムを見つける方法

    2. SQLiteの日付/時刻関数の有効な時間文字列形式

    3. T-SQLの日時は、関数を使用して最も近い分と最も近い時間に丸められます

    4. MySQLの「groupby」の「最後の」行を返す