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.
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.
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 TABLEperintah baru , menyalin data dari tabel lama, lalu menghapusnya.
Tidak ada perintah SQL untuk menentukan urutan kolom.
INSERTtanpa 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:
select * from foobar
kembali
foo bar
--- ---
1 2
sekarang Tulis
select bar, foo from foobar
bar foo
--- ---
2 1
menurut http://msdn.microsoft.com/en-us/library/aa337556.aspx
Tugas ini tidak didukung menggunakan pernyataan Transact-SQL.
Nah, itu bisa dilakukan, dengan menggunakan create/ copy / drop/ rename, seperti yang dijawab oleh komma8.komma1
Atau Anda dapat menggunakan SQL Server Management Studio
- Di Object Explorer , klik kanan tabel dengan kolom yang ingin Anda susun ulang dan klik Design (Modify in ver. 2005 SP1 atau lebih lama)
- Pilih kotak di sebelah kiri nama kolom yang ingin Anda susun ulang. (Anda dapat memilih beberapa kolom dengan menahan tombol [shift] atau [ctrl] pada keyboard Anda.)
- Seret kolom ke lokasi lain di dalam tabel.
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.
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 `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
CREATE TABLE myTable(
a int NULL,
b varchar(50) NULL,
c datetime NULL
);
CREATE VIEW vw_myTable
AS
SELECT c, a, b
FROM myTable;
select * from myTable;
a b c
- - -
select * from vw_myTable
c a b
- - -
Di SQLServer Management Studio:
Alat -> Opsi -> Desainer -> Desainer Tabel dan Database
Kemudian:
Studio Manajemen SQLServer akan menghapus tabel dan membuatnya kembali menggunakan data.
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
CREATE TABLE TestTable (
Column1 INT,
Column2 VARCHAR(255)
);
GO
insert into TestTable values(1, 'Test1');
insert into TestTable values(2, 'Test2');
GO
select * from TestTable;
GO
ALTER TABLE TestTable ADD Column2_NEW VARCHAR(255);
ALTER TABLE TestTable ADD Column1_NEW INT;
GO
update TestTable
set Column1_NEW = Column1,
Column2_NEW = Column2;
GO
ALTER TABLE TestTable DROP COLUMN Column1;
ALTER TABLE TestTable DROP COLUMN Column2;
GO
sp_rename 'TestTable.Column1_NEW', 'Column1', 'COLUMN';
GO
sp_rename 'TestTable.Column2_NEW', 'Column2', 'COLUMN';
GO
select * from TestTable;
GO
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.
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
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_emps
(
id int NULL,
ename varchar(20) NULL
) ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_emps SET (LOCK_ESCALATION = TABLE)
GO
IF EXISTS(SELECT * FROM dbo.emps)
EXEC('INSERT INTO dbo.Tmp_emps (id, ename)
SELECT id, ename FROM dbo.emps WITH (HOLDLOCK TABLOCKX)')
GO
DROP TABLE dbo.emps
GO
EXECUTE sp_rename N'dbo.Tmp_emps', N'emps', 'OBJECT'
GO
COMMIT
Jika tabel Anda memiliki kolom yang cukup, Anda dapat mencoba ini. Pertama buat tabel baru dengan urutan kolom yang diinginkan.
create table new as select column1,column2,column3,....columnN from table_name;
Sekarang jatuhkan tabel menggunakan perintah drop
drop table table_name;
sekarang ganti nama tabel yang baru dibuat ke nama tabel lama Anda.
rename new to table_name;
sekarang pilih tabel, Anda memiliki kolom Anda diatur ulang seperti yang Anda inginkan sebelumnya.
select * from table_name;
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).
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
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.
ALTER TABLE tablename DROP COLUMN columnname;
ALTER TABLE tablename ADD columnname columntype;
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!
Saya kira Anda ingin menambahkan kolom baru di posisi tertentu. Anda dapat membuat kolom baru dengan memindahkan kolom saat ini ke kanan.
+---+---+---+
| A | B | C |
+---+---+---+
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.
+---+---+---+---+
| A | B | C | C |
+---+---+---+---+
|___^
Ubah tipe data dari kolom ketiga ke tipe yang sama seperti kolom sebelumnya dan salin data di sana.
+---+---+---+---+
| A | B | B | C |
+---+---+---+---+
|___^
Ubah nama kolom sesuai, buat ulang indeks yang dihapus dan referensi kunci asing.
+---+---+---+---+
| A | D | B | C |
+---+---+---+---+
Ubah tipe data kolom kedua.
Perlu diingat bahwa urutan kolom hanyalah hal "kosmetik" seperti yang dikatakan oleh marc_s .
Menggunakan
SELECT * FROM TABLE1
yang menampilkan urutan kolom default dari tabel.
Jika Anda ingin mengubah urutan kolom.
Tentukan nama kolom yang akan ditampilkan
SELECT COLUMN1, COLUMN5, COLUMN4, COLUMN3, COULMN2 FROM TABLE1
Anda dapat mengubahnya menggunakan kueri SQL. Berikut adalah sql query untuk mengubah urutan kolom.
ALTER TABLE table name
CHANGE COLUMN `column1` `column1` INT(11) NOT NULL COMMENT '' AFTER `column2`;
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.
Coba perintah ini:
alter table students modify age int(5) first;
Ini akan mengubah posisi usia ke posisi pertama.
mengubah nama tabel memodifikasi nama kolom int (5) pertama; akan membawa kolom pertama mengubah nama tabel memodifikasi nama kolom int (5) setelah (tablename);
Contoh: Ubah posisi field_priority setelah field_price dalam status tabel.
ALTER TABLE `status` CHANGE `priority` `priority` INT(11) NULL DEFAULT NULL AFTER `price`;