Bagikan melalui


UBAH TABEL column_definition (Transact-SQL)

Berlaku untuk:SQL ServerDatabase Azure SQLInstans Terkelola Azure SQLGudang di Microsoft FabricDatabase SQL di Microsoft Fabric

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

Konvensi sintaks transact-SQL

Syntax

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 )   
}  

Arguments

column_name

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

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.

precision
Presisi untuk jenis data yang ditentukan. Untuk informasi selengkapnya tentang nilai presisi yang valid, lihat Presisi, Skala, dan Panjang.

scale
Skala untuk jenis data yang ditentukan. Untuk informasi selengkapnya tentang nilai skala yang valid, lihat Presisi, Skala, dan Panjang.

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

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

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

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

Hanya berlaku untuk jenis data xml untuk mengaitkan kumpulan skema XML dengan jenis . Sebelum kolom tipe data xml ditambahkan 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 disediakan oleh aplikasi saat data sedang disisipkan, atau oleh batasan DEFAULT.

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.

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 dan Nama Kolase SQL Server.

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

Untuk informasi selengkapnya tentang COLLATE klausa, lihat COLLATE.

NULL | BUKAN NULL

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

[ BATASAN constraint_name ]

Menentukan awal DEFAULT definisi nilai. 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 DEFAULT definisi.

DEFAULT

Adalah kata kunci yang menentukan nilai default untuk kolom. DEFAULT definisi dapat digunakan untuk menyediakan nilai untuk kolom baru di baris data yang ada. DEFAULT definisi tidak dapat diterapkan ke kolom tanda waktu , atau kolom dengan IDENTITY properti. 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, NULLfungsi sistem , atau yang digunakan sebagai nilai kolom default. Jika digunakan 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 DEFAULT batasan, jika kolom mengizinkan NULLS, WITH VALUES atur nilai kolom baru ke nilai yang diberikan DEFAULT constant_expression untuk baris yang sudah ada.

Jika kolom yang ditambahkan tidak mengizinkan NULLS, untuk baris yang ada, nilai kolom akan selalu diatur ke nilai yang diberikan dalam DEFAULT constant expression.

Mulai dari SQL Server 2012 (11.x), ini bisa menjadi operasi metadata menambahkan-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 DEFAULT constant_expression 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 mengizinkan 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 dengan PRIMARY KEY batasan 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 DEFAULT kunci dan default terikat tidak dapat digunakan dengan kolom identitas. Baik benih maupun kenaikan harus ditentukan, atau tidak. Jika tidak ditentukan, defaultnya adalah (1,1).

Note

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

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 IDENTITY properti kolom dengan mengizinkan nilai disisipkan secara eksplisit, gunakan SET IDENTITY_INSERT.

biji Nilai yang digunakan untuk baris pertama yang dimuat ke dalam tabel.

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

BUKAN UNTUK REPLIKASI

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

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

ROWGUIDCOL

Berlaku untuk: SQL Server 2008 (10.0.x) dan versi 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 ROWGUIDCOL kolom. 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 NEWID() fungsi pada INSERT pernyataan atau tentukan NEWID() fungsi sebagai default untuk kolom. Untuk informasi selengkapnya, lihat NEWID (Transact-SQL) dan INSERT (Transact-SQL).

SPARSE

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 . ENCRYPTED WITH tidak didukung pada database SQL di Microsoft Fabric.

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.

ALGORITHM

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 DENGAN (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()
  • partial()
  • random()

Untuk parameter fungsi, lihat Masking Data Dinamis.

Remarks

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

Mesin Database tidak memberlakukan urutan untuk menentukan batasan DEFAULTkolom , , IDENTITYROWGUIDCOL, atau dalam definisi kolom.

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

Examples

Misalnya, lihat ALTER TABLE (Transact-SQL).