Bagaimana cara mengubah urutan kolom dalam tabel menggunakan kueri SQL di SQL Server 2005?
Saya ingin mengatur ulang urutan kolom dalam tabel menggunakan kueri SQL.
sql
sql-server-2005
Himadri
sumber
sumber
Jawaban:
Kamu tidak bisa. Urutan kolom hanyalah "kosmetik" yang kita pedulikan - bagi SQL Server, itu hampir selalu sama sekali tidak relevan.
Apa yang dilakukan SQL Server Management Studio di latar belakang saat Anda mengubah urutan kolom adalah membuat ulang tabel dari awal dengan
CREATE TABLE
perintah baru , menyalin data dari tabel lama, lalu menghapusnya.Tidak ada perintah SQL untuk menentukan urutan kolom.
sumber
INSERT
tanpa menentukan kolom Anda secara eksplisit!Anda harus secara eksplisit mencantumkan bidang dalam urutan yang Anda inginkan untuk dikembalikan daripada menggunakan * untuk urutan 'default'.
kueri asli:
kembali
sekarang Tulis
sumber
menurut http://msdn.microsoft.com/en-us/library/aa337556.aspx
Nah, itu bisa dilakukan, dengan menggunakan
create
/ copy /drop
/ rename, seperti yang dijawab oleh komma8.komma1Atau Anda dapat menggunakan SQL Server Management Studio
Lalu klik simpan. Metode ini sebenarnya menghapus dan membuat ulang tabel, jadi beberapa kesalahan mungkin terjadi.
Jika opsi Ubah Pelacakan diaktifkan untuk database dan tabel, Anda tidak boleh menggunakan metode ini.
Jika dinonaktifkan, opsi Cegah penyimpanan perubahan yang memerlukan pembuatan ulang tabel harus dikosongkan dalam menu Alat> Opsi> Desainer, jika tidak, kesalahan "Menyimpan perubahan tidak diizinkan" akan terjadi.
Masalah juga dapat muncul selama pembuatan kunci primer dan asing.
Jika salah satu kesalahan di atas terjadi, penyimpanan gagal yang membuat Anda dengan urutan kolom asli.
sumber
This task cannot be performed using Transact-SQL statements.
" dalam dokumen itu salah. Saya menjelaskan penulisnya dan memintanya untuk mengubahnya menjadi "This task is not supported using Transact-SQL statements.
". Sekitar sehari yang lalu, penulis setuju dan dokumen itu diperbaiki. Anda dapat mengikuti diskusi yang kami lakukan di GitHub .Ini mirip dengan pertanyaan tentang mengurutkan record dalam hasil query .. dan biasanya tidak ada yang menyukai jawaban yang benar secara formal ;-)
Jadi begini:
select *
tidak memaksa kolom dikembalikan dalam urutan tertentucreate table' or in the
alter tabel tambahkan `sumber
Anda tentu saja dapat mengubah urutan kolom dalam pernyataan sql. Namun jika Anda ingin membuat urutan kolom fisik tabel abstrak, Anda dapat membuat tampilan. yaitu
sumber
Di SQLServer Management Studio:
Alat -> Opsi -> Desainer -> Desainer Tabel dan Database
Kemudian:
Studio Manajemen SQLServer akan menghapus tabel dan membuatnya kembali menggunakan data.
sumber
Anda dapat melakukannya dengan membuat tabel baru, menyalin semua data, menjatuhkan tabel lama, lalu mengganti nama yang baru untuk menggantikan yang lama.
Anda juga dapat menambahkan kolom baru ke tabel, menyalin data kolom demi kolom, melepaskan kolom lama, lalu mengganti nama kolom baru agar sesuai dengan yang lama. Contoh sederhana di bawah ini: http://sqlfiddle.com/#!3/67af4/1
sumber
Di SQLServer Management Studio:
Tools
->Options
->Designers
->Table and Database Designers
Batalkan pilihan
Prevent saving changes that require table re-creation
.Sekarang Anda dapat menyusun ulang tabel.
sumber
Server Sql secara internal membangun skrip. Ini membuat tabel sementara dengan perubahan baru dan menyalin data dan menjatuhkan tabel saat ini kemudian membuat ulang sisipan tabel dari tabel temp. Saya menemukannya dari opsi "Generate Change script" ssms 2014. Script seperti ini. Dari Sini: Cara mengubah urutan kolom dalam tabel menggunakan query sql
sumber
Jika tabel Anda memiliki kolom yang cukup, Anda dapat mencoba ini. Pertama buat tabel baru dengan urutan kolom yang diinginkan.
Sekarang jatuhkan tabel menggunakan perintah drop
sekarang ganti nama tabel yang baru dibuat ke nama tabel lama Anda.
sekarang pilih tabel, Anda memiliki kolom Anda diatur ulang seperti yang Anda inginkan sebelumnya.
sumber
Pada akhirnya, Anda tidak bisa melakukan ini di MS SQL. Saya baru-baru ini membuat tabel saat dalam perjalanan (startup aplikasi) menggunakan Prosedur tersimpan yang membaca dari tabel pencarian. Ketika saya membuat tampilan yang menggabungkan ini dengan tabel lain yang saya buat sebelumnya secara manual (skema yang sama, dengan data), Gagal - hanya karena saya menggunakan '' Pilih * UNION Select * 'untuk tampilan. Pada saat yang sama, jika saya hanya menggunakan yang dibuat melalui prosedur tersimpan, saya berhasil.
Kesimpulannya: Jika ada aplikasi yang bergantung pada urutan kolomnya, itu benar-benar pemrograman yang kurang baik dan pasti akan menimbulkan masalah di kemudian hari. Kolom harus 'terasa' bebas berada di mana saja dan digunakan untuk proses data apa pun (INSERT, UPDATE, SELECT).
sumber
Anda dapat mencapainya dengan langkah-langkah ini:
hapus semua kunci asing dan kunci utama dari tabel asli.
ganti nama tabel asli.
menggunakan CTAS buat tabel asli sesuai urutan yang Anda inginkan.
jatuhkan meja lama.
terapkan semua batasan kembali ke tabel asli
sumber
Jika kolom yang akan disusun ulang baru-baru ini dibuat dan kosong, maka kolom tersebut dapat dihapus dan ditambahkan kembali dengan urutan yang benar.
Ini terjadi pada saya, memperluas database secara manual untuk menambahkan fungsionalitas baru, dan saya melewatkan satu kolom, dan ketika saya menambahkannya, urutannya salah.
Setelah tidak menemukan solusi yang memadai di sini, saya hanya mengoreksi tabel menggunakan jenis perintah berikut.
Catatan: lakukan ini hanya jika Anda tidak memiliki data di kolom yang Anda lepaskan.
Orang mengatakan bahwa urutan kolom tidak masalah. Saya secara teratur menggunakan SQL Server Management Studio "menghasilkan skrip" untuk membuat versi teks dari skema database. Untuk mengontrol versi secara efektif skrip ini (git) dan membandingkannya (WinMerge), sangat penting bahwa keluaran dari database yang kompatibel adalah sama, dan perbedaan yang disorot adalah perbedaan database asli.
Urutan kolom penting; tetapi hanya untuk beberapa orang, tidak untuk semua orang!
sumber
Saya kira Anda ingin menambahkan kolom baru di posisi tertentu. Anda dapat membuat kolom baru dengan memindahkan kolom saat ini ke kanan.
Hapus semua indeks yang terpengaruh dan referensi kunci asing. Tambahkan kolom baru dengan tipe data yang sama persis seperti kolom terakhir dan salin data di sana.
Ubah tipe data dari kolom ketiga ke tipe yang sama seperti kolom sebelumnya dan salin data di sana.
Ubah nama kolom sesuai, buat ulang indeks yang dihapus dan referensi kunci asing.
Ubah tipe data kolom kedua.
Perlu diingat bahwa urutan kolom hanyalah hal "kosmetik" seperti yang dikatakan oleh marc_s .
sumber
Menggunakan
yang menampilkan urutan kolom default dari tabel.
Jika Anda ingin mengubah urutan kolom.
Tentukan nama kolom yang akan ditampilkan
sumber
Anda dapat menggunakan pengindeksan .. Setelah pengindeksan, jika pilih * dari XXXX hasil harus sesuai indeks, Tapi hanya set hasil .. bukan struktur Tabel
sumber
Anda dapat mengubahnya menggunakan kueri SQL. Berikut adalah sql query untuk mengubah urutan kolom.
sumber
Untuk mendapatkan urutan kolom tertentu Anda perlu memilih kolom demi kolom dalam urutan yang Anda inginkan. Urutan pemilihan menentukan bagaimana kolom akan diurutkan dalam keluaran.
sumber
Coba perintah ini:
Ini akan mengubah posisi usia ke posisi pertama.
sumber
mengubah nama tabel memodifikasi nama kolom int (5) pertama; akan membawa kolom pertama mengubah nama tabel memodifikasi nama kolom int (5) setelah (tablename);
sumber
Contoh: Ubah posisi field_priority setelah field_price dalam status tabel.
sumber