ALTER TABLE column_definition (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceWarehouse di Microsoft Fabric

Menentukan properti kolom yang ditambahkan ke tabel dengan menggunakan ALTER TABLE.

Konvensi sintaks transact-SQL

Sintaksis

column_name <data_type>  
[ FILESTREAM ]  
[ COLLATE collation_name ]   
[ NULL | NOT NULL ]  
[   
    [ CONSTRAINT constraint_name ] DEFAULT constant_expression [ WITH VALUES ]   
    | IDENTITY [ ( seed , increment ) ] [ NOT FOR REPLICATION ]   
]  
[ ROWGUIDCOL ]   
[ SPARSE ]   
[ ENCRYPTED WITH  
  ( COLUMN_ENCRYPTION_KEY = key_name ,  
      ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED } ,   
      ALGORITHM =  'AEAD_AES_256_CBC_HMAC_SHA_256'   
  ) ]  
[ MASKED WITH ( FUNCTION = ' mask_function ') ]  
[ <column_constraint> [ ...n ] ]  
  
<data type> ::=   
[ type_schema_name . ] type_name   
    [ ( precision [ , scale ] | max |   
        [ { CONTENT | DOCUMENT } ] xml_schema_collection ) ]   
  
<column_constraint> ::=   
[ CONSTRAINT constraint_name ]   
{     { PRIMARY KEY | UNIQUE }   
        [ CLUSTERED | NONCLUSTERED ]   
        [   
            WITH FILLFACTOR = fillfactor    
          | WITH ( < index_option > [ , ...n ] )   
        ]   
        [ ON { partition_scheme_name ( partition_column_name )   
            | filegroup | "default" } ]  
  | [ FOREIGN KEY ]   
        REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]   
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ NOT FOR REPLICATION ]   
  | CHECK [ NOT FOR REPLICATION ] ( logical_expression )   
}  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

column_name
Adalah nama kolom yang akan diubah, ditambahkan, atau dihilangkan. column_name dapat terdiri dari 1 hingga 128 karakter. Untuk kolom baru, dibuat dengan jenis data tanda waktu, column_name dapat dihilangkan. Jika tidak ada column_name yang ditentukan untuk kolom jenis data tanda waktu, tanda waktu nama digunakan.

[ type_schema_name .type_name
Adalah jenis data untuk kolom yang ditambahkan dan skema tempat kolom tersebut berada.

type_name dapat berupa:

  • Jenis data sistem Microsoft SQL Server.

  • Jenis data alias berdasarkan jenis data sistem SQL Server. Jenis data alias harus dibuat dengan menggunakan CREATE TYPE sebelum dapat digunakan dalam definisi tabel.

  • Jenis microsoft .NET Framework yang ditentukan pengguna dan skema tempatnya berada. Jenis .NET Framework yang ditentukan pengguna harus dibuat dengan menggunakan CREATE TYPE sebelum dapat digunakan dalam definisi tabel.

Jika type_schema_name tidak ditentukan, Microsoft Database Engine mereferensikan type_name dalam urutan berikut:

  • Jenis data sistem SQL Server.

  • Skema default pengguna saat ini dalam database saat ini.

  • Skema dbo dalam database saat ini.

Presisi
Adalah presisi untuk jenis data yang ditentukan. Untuk informasi selengkapnya tentang nilai presisi yang valid, lihat Presisi, Skala, dan Panjang (Transact-SQL).

Skala
Adalah skala untuk jenis data yang ditentukan. Untuk informasi selengkapnya tentang nilai skala yang valid, lihat Presisi, Skala, dan Panjang (Transact-SQL).

max
Hanya berlaku untuk jenis data varchar, nvarchar, dan varbinary . Ini digunakan untuk menyimpan 2^31 byte karakter dan data biner, dan 2^30 byte data Unicode.

KONTEN
Menentukan bahwa setiap instans jenis data xml di column_name dapat terdiri dari beberapa elemen tingkat atas. CONTENT hanya berlaku untuk tipe data xml dan hanya dapat ditentukan jika xml_schema_collection juga ditentukan. Jika ini tidak ditentukan, CONTENT adalah perilaku default.

DOKUMEN
Menentukan bahwa setiap instans jenis data xml di column_name hanya dapat terdiri dari satu elemen tingkat atas. DOCUMENT hanya berlaku untuk tipe data xml dan hanya dapat ditentukan jika xml_schema_collection juga ditentukan.

xml_schema_collection
Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.

Hanya berlaku untuk jenis data xml untuk mengaitkan kumpulan skema XML dengan jenis . Sebelum mengetik kolom xml ke skema, skema harus terlebih dahulu dibuat dalam database dengan menggunakan CREATE XML SCHEMA COLLECTION.

FILESTREAM
Secara opsional menentukan atribut penyimpanan FILESTREAM untuk kolom yang memiliki type_namevarbinary(maks).

Saat FILESTREAM ditentukan untuk kolom, tabel juga harus memiliki kolom tipe data pengidentifikasi unik yang memiliki atribut ROWGUIDCOL. Kolom ini tidak boleh mengizinkan nilai null dan harus memiliki batasan kolom tunggal UNIQUE atau PRIMARY KEY. Nilai GUID untuk kolom harus disediakan baik oleh aplikasi saat data disisipkan, atau oleh batasan DEFAULT yang menggunakan fungsi NEWID ().

Kolom ROWGUIDCOL tidak dapat dihilangkan dan batasan terkait tidak dapat diubah saat ada kolom FILESTREAM yang ditentukan untuk tabel. Kolom ROWGUIDCOL hanya dapat dihilangkan setelah kolom FILESTREAM terakhir dihilangkan.

Saat atribut penyimpanan FILESTREAM ditentukan untuk kolom, semua nilai untuk kolom tersebut disimpan dalam kontainer data FILESTREAM pada sistem file.

Untuk contoh yang memperlihatkan cara menggunakan definisi kolom, lihat FILESTREAM (SQL Server).

MENYUSUN collation_name
Menentukan kolater kolom. Jika tidak ditentukan, kolom diberi kolase default database. Nama kolase dapat berupa nama kolase Windows atau nama kolase SQL. Untuk daftar dan informasi selengkapnya, lihat Nama Kolase Windows (Transact-SQL) dan Nama Kolase SQL Server (Transact-SQL).

Klausa COLLATE dapat digunakan untuk menentukan kolase hanya kolom jenis data karakter, varchar, nchar, dan nvarchar .

Untuk informasi selengkapnya tentang klausul COLLATE, lihat COLLATE (Transact-SQL).

NULL | BUKAN NULL
Menentukan apakah nilai null diizinkan dalam kolom. NULL bukan batasan yang ketat tetapi dapat ditentukan sama seperti NOT NULL.

[ BATASAN constraint_name ]
Menentukan awal definisi nilai DEFAULT. Untuk mempertahankan kompatibilitas dengan versi SQL Server yang lebih lama, nama batasan dapat ditetapkan ke DEFAULT. constraint_name harus mengikuti aturan untuk pengidentifikasi, kecuali bahwa nama tidak dapat dimulai dengan tanda angka (#). Jika constraint_name tidak ditentukan, nama yang dihasilkan sistem ditetapkan ke definisi DEFAULT.

DEFAULT
Adalah kata kunci yang menentukan nilai default untuk kolom. Definisi DEFAULT dapat digunakan untuk menyediakan nilai untuk kolom baru di baris data yang sudah ada. Definisi DEFAULT tidak dapat diterapkan ke kolom tanda waktu, atau kolom dengan properti IDENTITY. Jika nilai default ditentukan untuk kolom jenis yang ditentukan pengguna, jenis harus mendukung konversi implisit dari constant_expression ke jenis yang ditentukan pengguna.

constant_expression
Adalah nilai harfiah, NULL, atau fungsi sistem yang digunakan sebagai nilai kolom default. Jika digunakan bersama dengan kolom yang didefinisikan sebagai jenis .NET Framework yang ditentukan pengguna, implementasi jenis harus mendukung konversi implisit dari constant_expression ke jenis yang ditentukan pengguna.

DENGAN NILAI Saat menambahkan kolom DAN batasan DEFAULT, jika kolom mengizinkan NULLS menggunakan WITH VALUES akan, untuk baris yang sudah ada, atur nilai kolom baru ke nilai yang diberikan dalam constant_expression DEFAULT. Jika kolom yang ditambahkan tidak mengizinkan NULLS, untuk baris yang ada, nilai kolom akan selalu diatur ke nilai yang diberikan dalam ekspresi konstanta DEFAULT. Mulai SQL Server 2012 ini mungkin merupakan operasi meta data adding-not-null-columns-as-an-online-operation. Jika ini digunakan ketika kolom terkait tidak juga ditambahkan, maka kolom tersebut tidak berpengaruh.

Menentukan bahwa nilai yang diberikan dalam constant_expression DEFAULT disimpan dalam kolom baru yang ditambahkan ke baris yang sudah ada. Jika kolom yang ditambahkan memungkinkan nilai null dan WITH VALUES ditentukan, nilai default disimpan di kolom baru yang ditambahkan ke baris yang sudah ada. Jika WITH VALUES tidak ditentukan untuk kolom yang memperbolehkan null, nilai NULL disimpan di kolom baru, di baris yang sudah ada. Jika kolom baru tidak mengizinkan null, nilai default disimpan dalam baris baru terlepas dari apakah WITH VALUES ditentukan.

IDENTITY
Menentukan bahwa kolom baru adalah kolom identitas. Mesin Database SQL Server menyediakan nilai bertahap yang unik untuk kolom. Saat Anda menambahkan kolom pengidentifikasi ke tabel yang sudah ada, nomor identitas ditambahkan ke baris tabel yang sudah ada dengan nilai benih dan kenaikan. Urutan di mana baris diperbarui tidak dijamin. Nomor identitas juga dihasilkan untuk setiap baris baru yang ditambahkan.

Kolom identitas umumnya digunakan bersama dengan batasan KUNCI PRIMER untuk berfungsi sebagai pengidentifikasi baris unik untuk tabel. Properti IDENTITY dapat ditetapkan ke kolom tinyint, smallint, int, bigint, decimal(p,0), atau numerik(p,0). Hanya satu kolom identitas yang dapat dibuat per tabel. Kata kunci DEFAULT dan default terikat tidak dapat digunakan dengan kolom identitas. Baik benih maupun kenaikan harus ditentukan, atau tidak. Jika tidak ditentukan, defaultnya adalah (1,1).

Catatan

Anda tidak dapat mengubah kolom tabel yang ada untuk menambahkan properti IDENTITY.

Menambahkan kolom identitas ke tabel yang diterbitkan tidak didukung karena dapat mengakibatkan nonkonvergensi saat kolom direplikasi ke Pelanggan. Nilai dalam kolom identitas di Publisher bergantung pada urutan baris untuk tabel yang terpengaruh disimpan secara fisik. Baris mungkin disimpan secara berbeda di Pelanggan; oleh karena itu, nilai untuk kolom identitas bisa berbeda untuk baris yang sama..

Untuk menonaktifkan properti IDENTITY kolom dengan mengizinkan nilai disisipkan secara eksplisit, gunakan SET IDENTITY_INSERT.

Benih
Adalah nilai yang digunakan untuk baris pertama yang dimuat ke dalam tabel.

Kenaikan
Adalah nilai inkremental yang ditambahkan ke nilai identitas baris sebelumnya yang dimuat.

BUKAN UNTUK REPLIKASI
Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.

Dapat ditentukan untuk properti IDENTITY. Jika klausul ini ditentukan untuk properti IDENTITY, nilai tidak bertahap dalam kolom identitas saat agen replikasi melakukan operasi penyisipan.

ROWGUIDCOL
Berlaku untuk: SQL Server 2008 (10.0.x) dan yang lebih baru.

Menentukan bahwa kolom adalah kolom pengidentifikasi unik secara global baris. ROWGUIDCOL hanya dapat ditetapkan ke kolom pengidentifikasi unik, dan hanya satu kolom pengidentifikasi unik per tabel yang dapat ditetapkan sebagai kolom ROWGUIDCOL. ROWGUIDCOL tidak dapat ditetapkan ke kolom jenis data yang ditentukan pengguna.

ROWGUIDCOL tidak memberlakukan keunikan nilai yang disimpan dalam kolom. Selain itu, ROWGUIDCOL tidak secara otomatis menghasilkan nilai untuk baris baru yang disisipkan ke dalam tabel. Untuk menghasilkan nilai unik untuk setiap kolom, gunakan fungsi NEWID pada pernyataan INSERT atau tentukan fungsi NEWID sebagai default untuk kolom. Untuk informasi selengkapnya, lihat NEWID (Transact-SQL) dan INSERT (Transact-SQL).

JARANG
Menunjukkan bahwa kolom adalah kolom jarang. Penyimpanan kolom jarang dioptimalkan untuk nilai null. Kolom jarang tidak dapat ditetapkan sebagai NOT NULL. Untuk pembatasan tambahan dan informasi selengkapnya tentang kolom jarang, lihat Menggunakan Kolom Jarang.

<column_constraint>
Untuk definisi argumen batasan kolom, lihat column_constraint (Transact-SQL).

DIENKRIPSI DENGAN
Menentukan kolom enkripsi dengan menggunakan fitur Always Encrypted .

COLUMN_ENCRYPTION_KEY = key_name
Menentukan kunci enkripsi kolom. Untuk informasi selengkapnya, lihat MEMBUAT KUNCI ENKRIPSI KOLOM (Transact-SQL).

ENCRYPTION_TYPE = { DETERMINISTIK | ACAK }
Enkripsi deterministik menggunakan metode yang selalu menghasilkan nilai terenkripsi yang sama untuk nilai teks biasa yang diberikan. Menggunakan enkripsi deterministik memungkinkan pencarian menggunakan perbandingan kesetaraan, pengelompokan, dan gabungan tabel menggunakan gabungan kesetaraan berdasarkan nilai terenkripsi, tetapi juga dapat memungkinkan pengguna yang tidak sah untuk menebak informasi tentang nilai terenkripsi dengan memeriksa pola di kolom terenkripsi. Menggabungkan dua tabel pada kolom yang dienkripsi secara deterministik hanya dimungkinkan jika kedua kolom dienkripsi menggunakan kunci enkripsi kolom yang sama. Enkripsi deterministik harus menggunakan kolase kolom dengan urutan sortir biner2 untuk kolom karakter.

Enkripsi acak menggunakan metode yang mengenkripsi data dengan cara yang kurang dapat diprediksi. Enkripsi acak lebih aman, tetapi mencegah komputasi dan pengindeksan pada kolom terenkripsi, kecuali instans SQL Server Anda mendukung Always Encrypted dengan enklave aman.

Jika Anda menggunakan Always Encrypted (tanpa enklave aman), gunakan enkripsi deterministik untuk kolom yang akan dicari dengan parameter atau parameter pengelompokan, misalnya nomor ID pemerintah. Gunakan enkripsi acak, untuk data seperti nomor kartu kredit, yang tidak dikelompokkan dengan rekaman lain, atau digunakan untuk menggabungkan tabel, dan yang tidak dicari karena Anda menggunakan kolom lain (seperti nomor transaksi) untuk menemukan baris yang berisi kolom terenkripsi yang menarik.

Jika Anda menggunakan Always Encrypted dengan enklave aman, enkripsi acak adalah jenis enkripsi yang direkomendasikan.

Kolom harus dari jenis data yang memenuhi syarat.

ALGORITMA
Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru, SQL Database.
Harus 'AEAD_AES_256_CBC_HMAC_SHA_256'.

Untuk informasi selengkapnya termasuk batasan fitur, lihat Always Encrypted (Mesin Database).

TAMBAHKAN MASKED WITH ( FUNCTION = ' mask_function ')
Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru, SQL Database.

Menentukan masker data dinamis. mask_function adalah nama fungsi masking dengan parameter yang sesuai. Fungsi berikut tersedia:

  • default()

  • email()

  • parsial()

  • random()

Untuk parameter fungsi, lihat Masking Data Dinamis.

Keterangan

Jika kolom ditambahkan memiliki jenis data pengidentifikasi unik, kolom dapat ditentukan dengan default yang menggunakan fungsi NEWID() untuk menyediakan nilai pengidentifikasi unik di kolom baru untuk setiap baris yang ada dalam tabel.

Mesin Database tidak memberlakukan urutan untuk menentukan batasan DEFAULT, IDENTITY, ROWGUIDCOL, atau kolom dalam definisi kolom.

Pernyataan ALTER TABLE akan gagal jika menambahkan kolom akan menyebabkan ukuran baris data melebihi 8060 byte.

Contoh

Misalnya, lihat ALTER TABLE (Transact-SQL).

Lihat Juga

ALTER TABLE (Transact-SQL)