Saya perlu menambahkan kolom tertentu jika tidak ada. Saya memiliki sesuatu seperti berikut ini, tetapi selalu mengembalikan false:
IF EXISTS(SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'myTableName'
AND COLUMN_NAME = 'myColumnName')
Bagaimana saya bisa mengecek jika ada kolom dalam tabel database SQL Server?
COL_LENGTH('AdventureWorks2012.HumanResources.Department ','ModifiedDate')
berfungsi dengan baik.EXEC sp_executesql
denganUPDATE
pernyataan yang dibentuk .FROM [YourDatabase].INFORMATION_SCHEMA.COLUMNS
Jawaban:
SQL Server 2005 dan seterusnya:
Versi Martin Smith lebih pendek:
sumber
sys.columns
Alter table Table_Name Add [ColumnName] NVarchar(max) NULL; Select COL_LENGTH('[TABLE_NAME]', '[COLUMN_NAME]')
COL_LENGTH
perlu dikutip. Secara teori dimungkinkan bagi seseorang untuk membuat kolom yang benar-benar memiliki nama[COLUMN_NAME]
- misalnyaCREATE TABLE #T([[COLUMN_NAME]]] INT); SELECT * FROM #T
dan kemudian akan ambigu jika ini bukan aturannya.Versi yang lebih ringkas
Poin tentang izin untuk melihat metadata berlaku untuk semua jawaban, bukan hanya yang ini.
Perhatikan bahwa nama tabel parameter pertama
COL_LENGTH
bisa dalam satu, dua, atau tiga format nama bagian sesuai kebutuhan.Contoh referensi tabel dalam database berbeda adalah
Satu perbedaan dengan jawaban ini dibandingkan dengan menggunakan tampilan metadata adalah bahwa fungsi metadata seperti
COL_LENGTH
selalu hanya mengembalikan data tentang perubahan yang dilakukan terlepas dari tingkat isolasi yang berlaku.sumber
IF OBJECT_ID('TableName','U') IS NULL
untuk memeriksa keberadaan objek atauDB_ID('foo')
untuk memeriksa keberadaan database.x>>2
daripadax/4
di C ++. Kode verbose yang lebih banyak (if exists (select column_name from information_schema ...)
) membutuhkan lebih banyak ruang, tetapi tidak ada yang akan menggaruk kepala mereka mencoba mencari tahu apa yang dilakukannya.INFORMATION_SCHEMA
tampilan atausys.columns
hits disk, saatCOL_LENGTH
menggunakan metadata database yang di-cache.Tweak di bawah ini untuk memenuhi kebutuhan spesifik Anda:
Sunting untuk menangani sunting untuk pertanyaan : Itu seharusnya berhasil - perhatikan dengan teliti kode Anda untuk kesalahan bodoh; apakah Anda menanyakan INFORMATION_SCHEMA pada basis data yang sama dengan penyisipan Anda diterapkan misalnya? Apakah Anda memiliki salah ketik di tabel / nama kolom di salah satu pernyataan?
sumber
Coba ini...
sumber
SELECT 1
bukanSELECT TOP 1 1
;).EXISTS
pernyataan, SQL secara otomatis mengoptimalkan kolom menjauh (seperticount(*)
) sehinggaSELECT *
cukup.and [TABLE_SCHEMA] = '???'
klausa WHERE.Bagi orang yang memeriksa keberadaan kolom untuk menjatuhkannya.
Dari SQL Server 2016 Anda dapat menggunakan pernyataan DIE baru alih-alih
IF
pembungkus besarsumber
Saya lebih suka
INFORMATION_SCHEMA.COLUMNS
tabel sistem karena Microsoft tidak menjamin untuk menjaga tabel sistem antar versi. Sebagai contoh,dbo.syscolumns
masih bekerja di SQL 2008, tetapi sudah usang dan dapat dihapus kapan saja di masa depan.sumber
INFORMATION_SCHEMA
view hanya berisi metadata standar ANSI. Namun, itu sudah cukup untuk tes keberadaan.Anda dapat menggunakan tampilan sistem skema informasi untuk mengetahui cukup banyak tentang tabel yang Anda minati:
Anda juga dapat menginterogasi tampilan, prosedur tersimpan dan cukup banyak tentang database menggunakan tampilan Information_schema.
sumber
Coba sesuatu seperti:
Kemudian gunakan seperti ini:
Ini harus bekerja pada SQL Server 2000 & SQL Server 2005. Tidak yakin tentang SQL Server 2008, tetapi tidak melihat mengapa tidak.
sumber
Pertama periksa apakah kombinasi
table
/column
(id
/name
) ada didbo.syscolumns
(tabel SQL Server internal yang berisi definisi bidang), dan jika tidak mengeluarkanALTER TABLE
kueri yang sesuai untuk menambahkannya. Sebagai contoh:sumber
Seorang teman baik dan kolega saya menunjukkan kepada saya bagaimana Anda juga dapat menggunakan
IF
blok dengan fungsi SQLOBJECT_ID
danCOLUMNPROPERTY
dalam SQL SERVER 2005+ untuk memeriksa kolom. Anda dapat menggunakan sesuatu yang mirip dengan yang berikut ini:Anda dapat melihatnya sendiri di sini
sumber
COLUMNPROPERTY
hanya memeriksa .sumber
Ini bekerja untuk saya di SQL 2000:
sumber
Coba ini
sumber
INFORMATION_SCHEMA.TABLES
dan Anda tidak memfilter kolom untuk tabel tertentu, sehingga terkadang akan mengembalikan lebih dari satu baris untuk nama kolom yang sama di tabel terpisah;).Saya perlu serupa untuk SQL SERVER 2000 dan, seperti yang ditunjukkan oleh @Mitch, ini hanya berfungsi pada 2005+.
Jika itu membantu orang lain, inilah yang pada akhirnya berhasil bagi saya:
sumber
sumber
sumber
Versi tabel temporer dari jawaban yang diterima :
sumber
sumber
Jawaban gandum bagus, tetapi anggap Anda tidak memiliki pasangan nama tabel / nama kolom yang identik dalam skema atau basis data apa pun. Untuk membuatnya aman untuk kondisi itu gunakan ini ...
sumber
Ada beberapa cara untuk memeriksa keberadaan kolom. Saya akan sangat menyarankan untuk digunakan
INFORMATION_SCHEMA.COLUMNS
karena dibuat untuk berkomunikasi dengan pengguna. Pertimbangkan tabel berikut:dan bahkan beberapa metode akses lain yang tersedia untuk diperiksa
system catalog.
Juga, tidak perlu digunakan
SELECT *
, cukup mengujinya denganNULL value
sumber
SELECT *
denganEXISTS
, karena ketika ada digunakan itu tidak benar-benar memilih semua baris dan semua kolom, secara internal hanya memeriksa keberadaan dan tidak benar-benar memeriksa semua baris dan kolomSalah satu solusi paling sederhana dan mudah dipahami adalah:
sumber
Berikut ini adalah skrip sederhana yang saya gunakan untuk mengelola penambahan kolom dalam database:
Dalam contoh ini,
Name
adalahColumnName
untuk ditambahkan danObject_Id
adalahTableName
sumber
Kueri di bawah ini dapat digunakan untuk memeriksa apakah kolom yang dicari ada di tabel atau tidak. Kami dapat mengambil keputusan berdasarkan hasil yang dicari juga seperti yang ditunjukkan di bawah ini.
sumber
Namun variasi lain ...
sumber
tabel -> skrip tabel sebagai -> jendela baru - Anda memiliki skrip desain. periksa dan temukan nama kolom di jendela baru
sumber
Jalankan kueri di bawah ini untuk memeriksa apakah kolom ada di tabel yang diberikan:
sumber
Kontribusi lain adalah contoh berikut yang menambahkan kolom jika tidak ada.
Semoga ini bisa membantu. Simone
sumber
sumber
sumber
Lakukan sesuatu jika kolom tidak ada:
Lakukan sesuatu jika kolom ada:
sumber