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

SQLServerテーブルにデフォルト値の列を挿入するためのSQLDEFAULT制約

    デフォルトの制約を持つ列を持つテーブルにデータを挿入するには、テーブルのデフォルト値にDEFAULT制約を使用できます。この記事では、次の側面について説明します。

    • DEFAULT制約とそれらを作成するために必要な権限。
    • 新しいテーブルの作成中にDEFAULT制約を追加します。
    • 既存のテーブルにDEFAULT制約を追加します。
    • T-SQLスクリプトとSSMSを使用した制約定義の変更と表示。

    SQLServerのDEFAULTCONSTRAINTとは何ですか?

    デフォルトの制約は、列のデフォルト値を指定します。

    INSERTステートメントを実行したが、デフォルトの制約が作成された列に値を指定しない場合、SQLServerはDEFAULT制約定義で指定されたデフォルト値を挿入します。

    デフォルトの制約を作成するには、ALTERTABLEおよびCREATETABLE権限が必要です。

    新しいテーブルの作成中にデフォルトの制約を追加する

    SalesDetailsという名前のテーブルがあります Sale_Qtyを指定せずにテーブルにデータを挿入する場合 列の値の場合、クエリはゼロを挿入する必要があります。そのために、 DF_SalesDetails_SaleQtyという名前のデフォルトの制約を作成しています。 Sale_Qty 列。

    USE demodatabase 
    go 
    CREATE TABLE salesdetails 
      ( 
         id           INT IDENTITY (1, 1), 
         product_code VARCHAR(10), 
         sale_qty     INT CONSTRAINT df_salesdetails_saleqty DEFAULT 0 
      ) 
    

    次に、ダミーレコードを挿入して、制約の動作をテストします。次のクエリを実行します:

    INSERT INTO salesdetails 
                (product_code) 
    VALUES     ('PROD0001')
    

    次のクエリを使用して、テーブルのデータを表示します。

    INSERT INTO salesdetails 
                (product_code) 
    VALUES     ('PROD0001')
    

    出力

    ご覧のとおり、ゼロ Sale_Qtyに挿入されました 列。

    テーブルの作成中に、DEFAULT制約の名前を指定しません。 SQL Serverは、システムで生成された一意の名前で制約を作成します。

    以下のクエリを使用してテーブルを作成します:

    USE demodatabase 
    go 
    CREATE TABLE salesdetails 
      ( 
         id           INT IDENTITY (1, 1), 
         product_code VARCHAR(10), 
         sale_qty     INT DEFAULT 0 
      )
    

    次のスクリプトを実行して、制約名を表示します。

    SELECT NAME             [Constraint name], 
           parent_object_id [Table Name], 
           type_desc        [Object Type], 
           definition       [Constraint Definition] 
    FROM   sys.default_constraints 
    

    出力

    SQL Serverは、システムで生成された名前で制約を作成しました。

    既存のテーブルへのデフォルトの制約の追加

    テーブルの既存の列に制約を追加するには、 ALTER TABLE ADD CONSTRAINTを使用します ステートメント:

    ALTER TABLE [tbl_name] 
      ADD CONSTRAINT [constraint_name] DEFAULT [default_value] FOR [Column_name]
    

    構文では、

    • tbl_name :デフォルトの制約を追加するテーブルの名前を指定します。
    • constraint_name :目的の制約名を指定します。
    • column_name: デフォルトの制約を作成する列の名前を指定します。
    • default_value: 挿入する値(整数、文字、または文字列)を指定します。

    INSERTステートメントでcolumn_nameの値を指定しない場合、 default_valueで指定された値が挿入されます。 パラメータ。

    まず、 Product_nameを追加しましょう SalesDetailsへの列

    ALTER TABLE salesdetails 
      ADD product_name VARCHAR(500) 
    

    Product_name列の値を指定せずに、データをテーブルに挿入します。クエリはN/ Aを挿入する必要があります 。

    そのために、 DF_SalesDetails_ProductNameという名前のデフォルトの制約を作成しています。 Product_name 桁。次のクエリはデフォルトの制約を作成します:

    ALTER TABLE dbo.salesdetails 
      ADD CONSTRAINT df_salesdetails_productname DEFAULT 'N/A' FOR product_name 
    

    ここで、制約の動作を観察してみましょう。製品名を指定せずにレコードを挿入します:

    INSERT INTO salesdetails 
                (product_code, 
                 product_name, 
                 sale_qty) 
    VALUES     ('PROD0002', 
                'Dell Optiplex 7080', 
                20) 
    
    INSERT INTO salesdetails 
                (product_code, 
                 sale_qty) 
    VALUES     ('PROD0003', 
                50)
    

    レコードが挿入されたら、SELECTクエリを実行してデータを表示します。

    USE demodatabase 
    go 
    SELECT * 
    FROM   salesdetails 
    go
    

    出力

    上の画像でわかるように、 Product_nameの値は PROD0003の列 N / A

    T-SQLスクリプトを使用したDEFAULT制約の変更

    デフォルトの制約の定義を変更できます。最初に既存の制約を削除してから、別の定義で制約を作成します。

    N / A を挿入する代わりに、 、該当なしを挿入します 。まず、 DF_SalesDetails_ProductNameを削除する必要があります 制約。次のクエリを実行します:

    ALTER TABLE dbo.salesdetails 
      DROP CONSTRAINT df_salesdetails_productname
    

    制約が削除されたら、クエリを実行して制約を作成します。

    ALTER TABLE dbo.salesdetails 
      ADD CONSTRAINT df_salesdetails_productname DEFAULT 'Not Applicable' FOR 
      product_name 
    

    ここで、製品名を指定せずにレコードを挿入しましょう:

    INSERT INTO salesdetails 
                (product_code, 
                 sale_qty) 
    VALUES     ('PROD0004', 
                10)
    

    SELECTステートメントを実行して、 SalesDetailsのデータを表示します。 テーブル:

    USE demodatabase 
    go 
    SELECT * 
    FROM   salesdetails 
    go
    

    出力

    ご覧のとおり、 Product_nameの値 列は該当しません。

    SSMSを使用したデフォルトの制約の表示

    SQL Server Management Studioを使用し、動的管理ビューを照会して、DEFAULT制約のリストを表示できます。

    SSMSを開き、データベースを展開します >デモデータベース > SalesDetails >制約

    DF_SalesDetails_SaleQtyという名前の2つの制約を確認できます。 およびDF_SalesDetails_ProductName 作成されました。

    sys.default_constraintsにクエリを実行して制約を表示する別の方法 。次のクエリは、デフォルトの制約とその定義のリストを作成します。

    SELECT NAME                  [Constraint name], 
           Object_name(parent_object_id)[Table Name], 
           type_desc             [Consrtaint Type], 
           definition            [Constraint Definition] 
    FROM   sys.default_constraints
    

    出力

    sp_helpconstraintを使用できます テーブルに作成された制約のリストを表示するためのストアドプロシージャ:

    EXEC Sp_helpconstraint 'SalesDetails'

    出力

    constraint_keys 列には、デフォルトの制約定義が表示されます。

    制約の削除

    いくつかの方法で制約を削除できます。次のいずれかの方法を使用して実行できます。

    • ALTER TABLEDROPCONSTRAINTステートメント。
    • DROPDEFAULTステートメント。

    ALTER TABLEDROPCONSTRAINTコマンドを使用して制約を削除します

    制約を削除するには、 ALTER TABLE DROP CONSTRAINTを使用できます。 指図。構文は次のとおりです。

    Alter table [tbl_name] drop constraint [constraint_name]

    構文では、

    • tbl_name: デフォルトの制約を持つ列を持つテーブル名を指定します。
    • constraint_name: ドロップする制約名を指定します。

    DF_SalesDetails_SaleQtyを削除するとします。 SalesDetailsからの制約 テーブル。クエリを実行します:

    ALTER TABLE dbo.salesdetails 
      DROP CONSTRAINT [DF_SalesDetails_SaleQty] 
    

    以下のクエリを実行して、制約が削除されたことを確認します。

    SELECT NAME                  [Constraint name], 
           Object_name(parent_object_id)[Table Name], 
           type_desc             [Consrtaint Type], 
           definition            [Constraint Definition] 
    FROM   sys.default_constraints
    

    出力

    制約は削除されました。

    DROPDEFAULTステートメントを使用してDEFAULT制約を削除する

    ここで、 DROP DEFAULTを使用してデフォルトの制約を削除する方法を理解しましょう。 声明。 DROP DEFAULTの構文 ステートメントは次のとおりです。

    DROP DEFAULT [constraint_name]
    • constraint_name: ドロップする制約名を指定します。

    DROP DEFAULTを使用して制約を削除するには ステートメント、次のクエリを実行します:

    IF EXISTS (SELECT NAME 
               FROM   sys.objects 
               WHERE  NAME = 'DF_SalesDetails_ProductName' 
                      AND type = 'D') 
    DROP DEFAULT [DF_SalesDetails_ProductName]; 
    

    概要

    したがって、デフォルトの制約を使用した作業のいくつかの重要な側面を検討しました。新しいテーブルを作成するときにデフォルトの制約を作成する方法、またはテーブルの既存の列にデフォルトの制約を追加する方法を学習しました。

    また、デフォルトの制約定義を変更し、さまざまな方法でデフォルトの制約の詳細を表示し、デフォルトの制約を削除する場合についても説明しました。

    この情報と私たちが調べた実際の例があなたの仕事に役立つことを願っています。

    また読む

    SQL INSERT INTO SELECT:重複を処理する5つの簡単な方法


    1. 無効なパラメータ番号:パラメータが定義されていませんデータの挿入

    2. SQLServer-UNPIVOTを使用してNULLを含める

    3. Kubernetes AWSでのJenkinsの使用、パート1

    4. Oracle/TOADでのコンパイルエラーに関する情報を取得する方法