Wie ändere ich die Spaltenreihenfolge in einer Tabelle mithilfe der SQL-Abfrage in SQL Server 2005?
Ich möchte die Spaltenreihenfolge in einer Tabelle mithilfe der SQL-Abfrage neu anordnen.
Wie ändere ich die Spaltenreihenfolge in einer Tabelle mithilfe der SQL-Abfrage in SQL Server 2005?
Ich möchte die Spaltenreihenfolge in einer Tabelle mithilfe der SQL-Abfrage neu anordnen.
Antworten:
Du kannst nicht. Die Spaltenreihenfolge ist nur eine "kosmetische" Sache, die uns Menschen wichtig ist - für SQL Server ist sie fast immer absolut irrelevant.
Was SQL Server Management Studio im Hintergrund tut, wenn Sie die Spaltenreihenfolge ändern, besteht darin, die Tabelle mit einem neuen CREATE TABLE
Befehl von Grund auf neu zu erstellen, die Daten aus der alten Tabelle zu kopieren und sie dann zu löschen.
Es gibt keinen SQL-Befehl zum Definieren der Spaltenreihenfolge.
INSERT
ohne Ihre Spalten explizit anzugeben!
Sie müssen die Felder explizit in der Reihenfolge auflisten, in der sie zurückgegeben werden sollen, anstatt * für die 'Standard'-Reihenfolge zu verwenden.
ursprüngliche Abfrage:
select * from foobar
kehrt zurück
foo bar
--- ---
1 2
schreibe jetzt
select bar, foo from foobar
bar foo
--- ---
2 1
gemäß http://msdn.microsoft.com/en-us/library/aa337556.aspx
Diese Aufgabe wird mit Transact-SQL-Anweisungen nicht unterstützt.
Nun, es kann mit create
/ copy / drop
/ rename gemacht werden , wie von komma8.komma1 beantwortet
Oder Sie können SQL Server Management Studio verwenden
- Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf die Tabelle mit den Spalten, die Sie neu anordnen möchten, und klicken Sie auf Design (Ändern in Version 2005 SP1 oder früher).
- Aktivieren Sie das Feld links neben dem Spaltennamen, den Sie neu anordnen möchten. (Sie können mehrere Spalten auswählen, indem Sie die Tasten [Umschalt] oder [Strg] auf Ihrer Tastatur gedrückt halten.)
- Ziehen Sie die Spalte (n) an eine andere Stelle in der Tabelle.
Klicken Sie dann auf Speichern. Diese Methode löscht die Tabelle tatsächlich und erstellt sie neu, sodass einige Fehler auftreten können.
Wenn die Option Änderungsverfolgung für die Datenbank und die Tabelle aktiviert ist, sollten Sie diese Methode nicht verwenden.
Wenn diese Option deaktiviert ist, sollte die Option Änderungen am Speichern verhindern, für die die Tabelle neu erstellt werden muss, im Menü Extras> Optionen> Designer deaktiviert werden. Andernfalls tritt der Fehler "Speichern von Änderungen ist nicht zulässig" auf.
Probleme können auch bei der Erstellung von Primär- und Fremdschlüsseln auftreten.
Wenn einer der oben genannten Fehler auftritt, schlägt das Speichern fehl, sodass Sie die ursprüngliche Spaltenreihenfolge beibehalten.
This task cannot be performed using Transact-SQL statements.
" im Dokument war falsch. Ich erklärte den Autor und bat ihn, es in " This task is not supported using Transact-SQL statements.
" zu ändern . Vor ungefähr einem Tag stimmte der Autor zu und das Dokument wurde repariert. Sie können die Diskussion auf GitHub verfolgen .
Dies ähnelt der Frage zum Bestellen der Datensätze im Ergebnis einer Abfrage. Normalerweise mag niemand die formal korrekte Antwort ;-)
Also los geht's:
select *
erzwingt a nicht, dass die Spalten in einer bestimmten Reihenfolge zurückgegeben werdencreate table' or in the
Anweisungen "alter table add")Sie können natürlich die Reihenfolge der Spalten in einer SQL-Anweisung ändern. Wenn Sie jedoch die physische Spaltenreihenfolge von Tabellen abstrahieren möchten, können Sie eine Ansicht erstellen. dh
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
- - -
In SQLServer Management Studio:
Extras -> Optionen -> Designer -> Tabellen- und Datenbankdesigner
Dann:
SQLServer Management Studio löscht die Tabelle und erstellt sie anhand der Daten neu.
Sie können dies tun, indem Sie eine neue Tabelle erstellen, alle Daten kopieren, die alte Tabelle löschen und dann die neue umbenennen, um die alte zu ersetzen.
Sie können der Tabelle auch neue Spalten hinzufügen, die spaltenweisen Daten kopieren, die alten Spalten löschen und dann neue Spalten umbenennen, um sie an die alten anzupassen. Ein einfaches Beispiel unten: 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
In SQLServer Management Studio:
Tools
-> Options
-> Designers
->Table and Database Designers
Auswahl aufheben Prevent saving changes that require table re-creation
.
Jetzt können Sie die Tabelle neu anordnen.
SQL Server erstellt das Skript intern. Es erstellt eine temporäre Tabelle mit neuen Änderungen, kopiert die Daten und löscht die aktuelle Tabelle. Anschließend wird die Tabelleneinfügung aus der temporären Tabelle neu erstellt. Ich finde es aus der Option "Änderungsskript generieren" ssms 2014. Skript wie dieses. Von hier aus: So ändern Sie die Spaltenreihenfolge in einer Tabelle mithilfe der SQL-Abfrage
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
Wenn Ihre Tabelle genügend Spalten enthält, können Sie dies versuchen. Erstellen Sie zunächst eine neue Tabelle mit der bevorzugten Reihenfolge der Spalten.
create table new as select column1,column2,column3,....columnN from table_name;
Löschen Sie nun die Tabelle mit dem Befehl drop
drop table table_name;
Benennen Sie nun die neu erstellte Tabelle in Ihren alten Tabellennamen um.
rename new to table_name;
Wählen Sie nun die Tabelle aus, und Sie haben Ihre Spalten nach Ihren Wünschen neu angeordnet.
select * from table_name;
Letztendlich können Sie dies in MS SQL einfach nicht tun. Ich habe kürzlich Tabellen unterwegs (Anwendungsstart) mit einer gespeicherten Prozedur erstellt, die aus einer Nachschlagetabelle liest. Als ich eine Ansicht erstellte, die diese mit einer anderen Tabelle kombinierte, die ich zuvor manuell erstellt hatte (dasselbe Schema mit Daten), schlug dies fehl - einfach, weil ich '' Select * UNION Select * '' für die Ansicht verwendete. Wenn ich nur diejenigen verwende, die über die gespeicherte Prozedur erstellt wurden, bin ich gleichzeitig erfolgreich.
Fazit: Wenn es eine Anwendung gibt, die von der Reihenfolge der Spalten abhängt, ist dies wirklich keine gute Programmierung und wird mit Sicherheit in Zukunft Probleme verursachen. Spalten sollten sich frei fühlen, überall zu sein und für jeden Datenprozess (INSERT, UPDATE, SELECT) verwendet zu werden.
Sie können dies mit folgenden Schritten erreichen:
Entfernen Sie alle Fremdschlüssel und Primärschlüssel der Originaltabelle.
Benennen Sie die ursprüngliche Tabelle um.
Erstellen Sie mit CTAS die Originaltabelle in der gewünschten Reihenfolge.
Lass den alten Tisch fallen.
Wenden Sie alle Einschränkungen wieder auf die ursprüngliche Tabelle an
Wenn die neu zu ordnenden Spalten kürzlich erstellt wurden und leer sind, können die Spalten gelöscht und in der richtigen Reihenfolge wieder hinzugefügt werden.
Dies geschah mir, als ich eine Datenbank manuell erweiterte, um neue Funktionen hinzuzufügen, und ich hatte eine Spalte verpasst, und als ich sie hinzufügte, war die Reihenfolge falsch.
Nachdem ich hier keine adäquate Lösung gefunden hatte, korrigierte ich die Tabelle einfach mit den folgenden Befehlen.
ALTER TABLE tablename DROP COLUMN columnname;
ALTER TABLE tablename ADD columnname columntype;
Hinweis: Tun Sie dies nur, wenn Sie keine Daten in den Spalten haben, die Sie löschen.
Die Leute haben gesagt, dass die Spaltenreihenfolge keine Rolle spielt. Ich verwende regelmäßig SQL Server Management Studio "Skripte generieren", um eine Textversion des Schemas einer Datenbank zu erstellen. Um die Versionskontrolle dieser Skripte (git) effektiv durchzuführen und sie zu vergleichen (WinMerge), ist es unbedingt erforderlich, dass die Ausgabe kompatibler Datenbanken gleich ist und die hervorgehobenen Unterschiede echte Datenbankunterschiede sind.
Die Spaltenreihenfolge spielt eine Rolle. aber nur für einige Leute, nicht für alle!
Ich nehme an, Sie möchten an einer bestimmten Position eine neue Spalte hinzufügen. Sie können eine neue Spalte erstellen, indem Sie die aktuellen Spalten nach rechts verschieben.
+---+---+---+
| A | B | C |
+---+---+---+
Entfernen Sie alle betroffenen Indizes und Fremdschlüsselreferenzen. Fügen Sie eine neue Spalte mit genau demselben Datentyp wie die letzte Spalte hinzu und kopieren Sie die Daten dort.
+---+---+---+---+
| A | B | C | C |
+---+---+---+---+
|___^
Ändern Sie den Datentyp der dritten Spalte in den gleichen Typ wie in der vorherigen Spalte und kopieren Sie die Daten dort.
+---+---+---+---+
| A | B | B | C |
+---+---+---+---+
|___^
Benennen Sie die Spalten entsprechend um, erstellen Sie entfernte Indizes und Fremdschlüsselreferenzen neu.
+---+---+---+---+
| A | D | B | C |
+---+---+---+---+
Ändern Sie den Datentyp der zweiten Spalte.
Denken Sie daran, dass die Spaltenreihenfolge nur eine "kosmetische" Sache ist, wie marc_s sagte .
Verwenden
SELECT * FROM TABLE1
Hier wird die Standardspaltenreihenfolge der Tabelle angezeigt.
Wenn Sie die Reihenfolge der Spalten ändern möchten.
Geben Sie den Spaltennamen an, der entsprechend angezeigt werden soll
SELECT COLUMN1, COLUMN5, COLUMN4, COLUMN3, COULMN2 FROM TABLE1
Sie können dies mithilfe der SQL-Abfrage ändern. Hier ist eine SQL-Abfrage, um die Reihenfolge der Spalten zu ändern.
ALTER TABLE table name
CHANGE COLUMN `column1` `column1` INT(11) NOT NULL COMMENT '' AFTER `column2`;
Um eine bestimmte Spaltenreihenfolge zu haben, müssen Sie Spalte für Spalte in der gewünschten Reihenfolge auswählen. Die Auswahlreihenfolge bestimmt, wie die Spalten in der Ausgabe sortiert werden.
Versuchen Sie diesen Befehl:
alter table students modify age int(5) first;
Dadurch wird die Altersposition auf die erste Position geändert.
Tabellenname ändern Spaltenname ändern int (5) zuerst; bringt die Spalte zum ersten Ändern des Tabellennamens Ändern des Spaltennamens int (5) nach (Tabellenname);
Beispiel: Ändern Sie die Position von field_priority nach field_price im Tabellenstatus.
ALTER TABLE `status` CHANGE `priority` `priority` INT(11) NULL DEFAULT NULL AFTER `price`;