Come modificare l'ordine delle colonne in una tabella utilizzando la query SQL in SQL Server 2005?
Voglio riorganizzare l'ordine delle colonne in una tabella utilizzando la query SQL.
Come modificare l'ordine delle colonne in una tabella utilizzando la query SQL in SQL Server 2005?
Voglio riorganizzare l'ordine delle colonne in una tabella utilizzando la query SQL.
Risposte:
Non puoi. L'ordine delle colonne è solo una cosa "cosmetica" di cui noi umani teniamo: per SQL Server è quasi sempre assolutamente irrilevante.
Ciò che SQL Server Management Studio esegue in background quando si modifica l'ordine delle colonne è ricreare la tabella da zero con un nuovo CREATE TABLE
comando, copiare i dati dalla vecchia tabella e quindi rilasciarla.
Non esiste un comando SQL per definire l'ordinamento delle colonne.
INSERT
senza specificare esplicitamente le tue colonne comunque!
Devi elencare esplicitamente i campi nell'ordine in cui desideri che vengano restituiti invece di utilizzare * per l'ordine "predefinito".
query originale:
select * from foobar
ritorna
foo bar
--- ---
1 2
ora Scrivi
select bar, foo from foobar
bar foo
--- ---
2 1
secondo http://msdn.microsoft.com/en-us/library/aa337556.aspx
Questa attività non è supportata utilizzando le istruzioni Transact-SQL.
Bene, può essere fatto, usando create
/ copy / drop
/ rename, come risposto da komma8.komma1
Oppure puoi usare SQL Server Management Studio
- In Esplora oggetti , fare clic con il pulsante destro del mouse sulla tabella con le colonne che si desidera riordinare e fare clic su Design (Modifica in ver.2005 SP1 o precedente)
- Seleziona la casella a sinistra del nome della colonna che desideri riordinare. (Puoi selezionare più colonne tenendo premuti i tasti [shift] o [ctrl] sulla tastiera.)
- Trascina le colonne in un'altra posizione all'interno della tabella.
Quindi fare clic su Salva. Questo metodo elimina e ricrea effettivamente la tabella, quindi potrebbero verificarsi alcuni errori.
Se l' opzione Change Tracking è abilitata per il database e la tabella, non dovresti usare questo metodo.
Se è disabilitata, l' opzione Impedisci il salvataggio delle modifiche che richiedono la ricreazione della tabella dovrebbe essere deselezionata nel menu Strumenti> Opzioni> Designer, altrimenti si verificherà l'errore "Il salvataggio delle modifiche non è consentito" .
Possono sorgere problemi anche durante la creazione di chiavi primarie ed esterne.
Se si verifica uno degli errori precedenti, il salvataggio non riesce, il che ti lascia con l'ordine delle colonne originale.
This task cannot be performed using Transact-SQL statements.
" nel documento era sbagliata. Ho spiegato l'autore e gli ho chiesto di cambiarlo in " This task is not supported using Transact-SQL statements.
". Circa un giorno fa, l'autore ha accettato e il documento è stato corretto. Puoi seguire la discussione che abbiamo avuto su GitHub .
È simile alla domanda sull'ordinamento dei record nel risultato di una query .. e in genere a nessuno piace la risposta formalmente corretta ;-)
Quindi eccolo:
select *
non forza la restituzione delle colonne in un ordine particolarecreate table' or in the
tabella di alterazione add `istruzioniOvviamente puoi cambiare l'ordine delle colonne in un'istruzione sql. Tuttavia, se desideri astrarre l'ordine fisico delle colonne delle tabelle, puoi creare una vista. vale a dire
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:
Strumenti -> Opzioni -> Progettisti -> Progettisti di tabelle e database
Poi:
SQLServer Management Studio eliminerà la tabella e la ricrea utilizzando i dati.
Puoi farlo creando una nuova tabella, copiare tutti i dati, rilasciare la vecchia tabella, quindi rinominare quella nuova per sostituire quella vecchia.
Puoi anche aggiungere nuove colonne alla tabella, copiare i dati colonna per colonna, rilasciare le vecchie colonne, quindi rinominare le nuove colonne in modo che corrispondano a quelle vecchie. Un semplice esempio di seguito: 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
Deseleziona Prevent saving changes that require table re-creation
.
Ora puoi riordinare la tabella.
Il server SQL crea internamente lo script. Crea una tabella temporanea con nuove modifiche e copia i dati e rilascia la tabella corrente, quindi ricrea l'inserimento della tabella dalla tabella temporanea. Lo trovo dall'opzione "Genera script di modifica" ssms 2014. Script come questo. Da qui: come modificare l'ordine delle colonne in una tabella utilizzando la 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
Se la tua tabella ha abbastanza colonne, puoi provare questo. Per prima cosa crea una nuova tabella con l'ordine preferito delle colonne.
create table new as select column1,column2,column3,....columnN from table_name;
Ora rilascia la tabella usando il comando drop
drop table table_name;
ora rinomina la tabella appena creata con il tuo vecchio nome di tabella.
rename new to table_name;
ora seleziona la tabella, hai riorganizzato le colonne come preferivi prima.
select * from table_name;
Alla fine della giornata, semplicemente non puoi farlo in MS SQL. Di recente ho creato tabelle in movimento (avvio dell'applicazione) utilizzando una procedura memorizzata che legge da una tabella di ricerca. Quando ho creato una vista che le combinava con un'altra tabella che avevo creato manualmente in precedenza (lo stesso schema, con i dati), non è riuscita, semplicemente perché stavo usando '' Seleziona * UNION Seleziona * 'per la vista. Allo stesso tempo, se utilizzo solo quelli creati tramite la stored procedure, ho successo.
In conclusione: se esiste un'applicazione che dipende dall'ordine delle colonne, non è davvero una buona programmazione e sicuramente creerà problemi in futuro. Le colonne dovrebbero "sentirsi" libere di essere ovunque e di essere utilizzate per qualsiasi processo di dati (INSERT, UPDATE, SELECT).
Puoi ottenerlo con questi passaggi:
rimuovere tutte le chiavi esterne e la chiave primaria della tabella originale.
rinomina la tabella originale.
utilizzando CTAS creare la tabella originale nell'ordine desiderato.
lascia cadere il vecchio tavolo.
applicare tutti i vincoli alla tabella originale
Se le colonne da riordinare sono state create di recente e sono vuote, è possibile eliminare e aggiungere nuovamente le colonne nell'ordine corretto.
Questo è successo a me, estendendo manualmente un database per aggiungere nuove funzionalità, e avevo perso una colonna e quando l'ho aggiunta, la sequenza non era corretta.
Dopo aver trovato nessuna soluzione adeguata qui, ho semplicemente corretto la tabella utilizzando il seguente tipo di comandi.
ALTER TABLE tablename DROP COLUMN columnname;
ALTER TABLE tablename ADD columnname columntype;
Nota: fallo solo se non hai dati nelle colonne che stai eliminando.
La gente ha detto che l'ordine delle colonne non ha importanza. Uso regolarmente SQL Server Management Studio per "generare script" per creare una versione di testo dello schema di un database. Per controllare efficacemente la versione di questi script (git) e per confrontarli (WinMerge), è imperativo che l'output da database compatibili sia lo stesso e le differenze evidenziate siano autentiche differenze di database.
L'ordine delle colonne è importante; ma solo ad alcune persone, non a tutti!
Suppongo che tu voglia aggiungere una nuova colonna in una posizione specifica. È possibile creare una nuova colonna spostando le colonne correnti a destra.
+---+---+---+
| A | B | C |
+---+---+---+
Rimuovere tutti gli indici interessati e i riferimenti alle chiavi esterne. Aggiungi una nuova colonna con lo stesso identico tipo di dati dell'ultima colonna e copia i dati lì.
+---+---+---+---+
| A | B | C | C |
+---+---+---+---+
|___^
Cambia il tipo di dati della terza colonna nello stesso tipo della colonna precedente e copia i dati lì.
+---+---+---+---+
| A | B | B | C |
+---+---+---+---+
|___^
Rinomina le colonne di conseguenza, ricrea gli indici rimossi e i riferimenti alle chiavi esterne.
+---+---+---+---+
| A | D | B | C |
+---+---+---+---+
Modifica il tipo di dati della seconda colonna.
Tieni presente che l'ordine delle colonne è solo una cosa "cosmetica" come ha detto marc_s .
Uso
SELECT * FROM TABLE1
che mostra l'ordine delle colonne predefinito della tabella.
Se vuoi cambiare l'ordine delle colonne.
Specificare il nome della colonna da visualizzare di conseguenza
SELECT COLUMN1, COLUMN5, COLUMN4, COLUMN3, COULMN2 FROM TABLE1
Puoi cambiarlo usando la query SQL. Ecco la query sql per modificare la sequenza della colonna.
ALTER TABLE table name
CHANGE COLUMN `column1` `column1` INT(11) NOT NULL COMMENT '' AFTER `column2`;
Per avere un ordine di colonna specifico è necessario selezionare colonna per colonna nell'ordine desiderato. L'ordine di selezione determina come verranno ordinate le colonne nell'output.
Prova questo comando:
alter table students modify age int(5) first;
Questo cambierà la posizione dell'età alla prima posizione.
altera il nome della tabella prima modifica il nome della colonna int (5); porterà la colonna a modificare prima il nome della tabella modificare il nome della colonna int (5) dopo (tablename);
Esempio: modifica la posizione di field_priority dopo field_price nello stato della tabella.
ALTER TABLE `status` CHANGE `priority` `priority` INT(11) NULL DEFAULT NULL AFTER `price`;