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

SQLServerの基本ALTERTABLEステートメント

    この記事では、SQLServerのALTERTABLEステートメントとSQLServerテーブルの次のタスクに焦点を当てています。

    1. 既存のテーブルに1つまたは複数の列を追加します。
    2. テーブルの1つまたは複数の列を変更します。特に、次のように変更します。
      • 列に制約を追加します。
      • 列のデータ型を変更します。
    3. SQLテーブルの列を削除します。

    デモンストレーションの目的で、 VSDatabaseという名前のデータベースを作成しました。 患者のデータが挿入されます。そこで、 tblPatientsという名前のテーブルを追加しました 。テーブルの構造は次のとおりです。

    以下は、テーブルを作成するためのスクリプトです。

    Use VSDatabase
    Go
    create table tblpatients
    (
    Patient_ID varchar(10),
    Patient_name varchar(50),
    Address varchar(500),
    City varchar(50),
    AppointmentDate datetime
    )
    

    次のスクリプトは、ダミーデータを tblPatientsに挿入します テーブル:

    insert into tblpatients (Patient_ID,Patient_name,Address,City,AppointmentDate)
    values
    ('OPD00001','Nisarg Upadhyay','AB-14, Akshardham Flats','Mehsana','2021-02-10'),
    ('OPD00002','Nirali Upadhyay','AB-14, Akshardham Flats','Mehsana','2021-02-11'),
    ('OPD00003','Manushi Bhatt ','B-50, Suramya Flats','Surat','2021-02-10'),
    ('OPD00004','Arjun Bhatt','B-50, Suramya Flats','Surat','2021-02-12'),
    ('OPD00005','Dixit Upadhyay','AB-14, Akshardham Flats','Mehsana','2021-02-09')
    

    ここで、ALTERTABLEステートメントを例で理解しましょう。

    既存のテーブルに1つまたは複数の列を追加します

    ALTER TABLEコマンドを使用して、1つまたは複数の列を追加できます。列を追加する構文は次のとおりです。

    ALTER TABLE tbl_name ADD column_name_1 datatype, column_name_2 datatype ..

    どこで、

    1. tbl_name :新しい列を追加するテーブルの名前を指定します。
    2. Column_name_1データ型 :列名とそのデータ型を指定します。複数の列を追加する場合は、各列をコンマ(、)で区切る必要があります

    first_nameという名前の新しい列を追加したい tblPatients 。列を追加するには、次のクエリを実行します。

    ALTER TABLE tblpatients ADD first_name VARCHAR(50)

    次に、複数の列、 middle_name を追加します およびlast_name tblPatientsへの列 テーブル。そのために、次のクエリを実行します。

    ALTER TABLE tblpatients ADD middle_name VARCHAR(50),last_name VARCHAR(50)

    information_schema.columnsをクエリできます またはsys.columns 新しく追加された列を確認するためのテーブル。クエリは次のとおりです。

    information_schema.columnsをクエリするには :

    select TABLE_NAME,COLUMN_NAME,IS_NULLABLE,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,COLLATION_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='tblpatients'

    出力:

    クエリするにはSys.columns:

    select object_name(object_id) [Table Name],name,max_length from sys.columns where object_id =object_id('tblpatients')

    出力:

    ご覧のとおり、列が追加されています。

    テーブルの列を変更する

    次に、テーブルの列の変更について説明します。まず、テーブルの列の名前を変更する方法を理解する必要があります。

    既存のテーブルのデータ型を変更する

    列のデータ型を変更するためのALTERTABLEの構文は次のとおりです。

    ALTER TABLE tbl_name ALTER COLUMN column_name datatype

    どこで、

    • tbl_name :列のデータ型を変更する必要があるテーブルの名前。
    • Column_name :列名とデータ型。 ALTERCOLUMNキーワードの後に​​新しいデータ型を指定する必要があります。

    アドレス列のデータ型を変更してみましょう。アドレス列の現在の長さはvarchar(1000)です。列の長さをvarchar(50)に変更する必要があります。

    データ型を変更するためのクエリは次のとおりです。

    Alter table tblpatients alter column address varchar(50)

    SQLクエリを実行すると、次のエラーが発生します。

    Msg 2628, Level 16, State 1, Line 1
    String or binary data would be truncated in table 'VSDatabase.dbo.tblpatients', column 'Address'. Truncated value: ''.
    

    したがって、列の長さを短くしながら、レコードの最大長を確認し、それに基づいて変更する必要があります。この例では、次のクエリを実行して、アドレスのレコードの最大長を特定します。 列:

    select len(Address) [Maximum length of column],Address from tblpatients

    出力:

    出力に従って、アドレス列の最小長はvarchar(25)である必要があります。

    次のクエリを実行して、列の長さを変更します。

    Alter table tblpatients alter column address varchar(25)

    次のクエリを実行して、長さを確認します。

    select TABLE_NAME,COLUMN_NAME,IS_NULLABLE,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,COLLATION_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='tblpatients'

    出力:

    ご覧のとおり、列の長さは正常に変更されています。

    列に制約を追加

    ALTER TABLEステートメントを使用して、列に制約を追加できます。 ALTERTABLEの構文は次のとおりです。

    ALTER TABLE tbl_name ALTER COLUMN column_name datatype constraint_name

    どこで、

    • tbl_name :列のデータ型を変更する必要があるテーブルの名前。
    • Column_name :列名とデータ型。 ALTERCOLUMNキーワードの後に​​新しいデータ型を指定します。
    • Constraint_name :制約のタイプ。次の制約のいずれかである必要があります。
      • ユニーク
      • NULLではありません
      • 確認
      • デフォルト
      • 主キー
      • 外部キー

    NOT NULLを追加するとします。 都市に対する制約 桁。次のALTERTABLEを実行します ステートメント:

    Alter table tblpatients alter column Patient_name varchar(50) not null

    PRIMARY KEYを追加する構文 patient_id に主キーを追加する場合は、制約が異なります。 桁。制約を追加するには、次のクエリを実行します。

    Alter table tblpatients add primary key (Patient_ID)

    次のエラーが表示されます:

    Msg 8111, Level 16, State 1, Line 17
    Cannot define PRIMARY KEY constraint on nullable column in table 'tblpatients'.
    Msg 1750, Level 16, State 0, Line 17
    Could not create constraint or index. See previous errors.
    

    エラーを修正するには、 Patient_IDにNOTNULL制約を作成する必要があります 桁。次のクエリを実行します:

    Alter table tblpatients alter column Patient_ID varchar(50) not null

    制約が追加されたら、次のクエリを実行して主キーを追加します。

    Alter table tblpatients add primary key (Patient_ID)

    主キーが正常に追加されます。

    テーブルの制約を表示するには、次のクエリを実行します。

    SELECT OBJECT_NAME(object_id) AS ConstraintName,
    SCHEMA_NAME(schema_id) AS SchemaName,
    type_desc AS ConstraintType
    FROM sys.objects
    WHERE type_desc LIKE '%CONSTRAINT' AND OBJECT_NAME(parent_object_id)='tblpatients'
    

    出力:

    このようにして、主キー制約が作成されました。

    テーブルの列を削除する

    ALTERTABLEステートメントを使用して列を削除できます。構文は次のとおりです。

    ALTER TABLE tbl_name DROP Column column_name

    どこで、

    • tbl_name :列を削除するテーブルの名前。
    • Column_name:テーブルから削除する列。

    first_nameを追加しました およびlast_name tblPatientsへの列 テーブル。したがって、 patient_nameは必要ありません。 列。

    列を削除するには、次のクエリを実行します。

    Alter table tblpatients drop column Patient_name

    注: PRIMARYKEYまたはFOREIGNKEY制約のある列を削除する場合は、列を削除する前に制約を削除する必要があります。

    概要

    この記事では、ALTERTABLEステートメントの目的と基本的なユースケースについて説明しました。表の列を追加、変更、および削除したり、ALTERTABLEステートメントを使用して表に制約を追加したりできます。次の記事では、いくつかの高度な管理オプションについて説明します。

    また読む

    SQLServerのALTERTABLEADDCOLUMNステートメントについて


    1. Psycopg2のLoggingConnectionを使用するにはどうすればよいですか?

    2. MariaDBで列のデータ型を確認する4つの方法

    3. 4すぐに使えるSQLデータ変換方法とユースケース

    4. PostgreSQLで日付をユリウス日に変換する