Comment changer l'ordre des colonnes dans une table à l'aide d'une requête SQL dans SQL Server 2005?
Je souhaite réorganiser l'ordre des colonnes dans une table à l'aide d'une requête SQL.
Vous ne pouvez pas. L’ordre des colonnes n’est qu’un aspect «cosmétique» qui nous tient à cœur - pour SQL Server, il n’est presque toujours pas pertinent.
Ce que SQL Server Management Studio fait en arrière-plan lorsque vous modifiez l'ordre des colonnes, la table est recréée à partir de zéro avec une nouvelle commande CREATE TABLE
, en copiant les données de l'ancienne table, puis en les supprimant.
Il n'y a pas de commande SQL pour définir l'ordre des colonnes.
Vous devez lister explicitement les champs dans l'ordre dans lequel vous souhaitez les retourner au lieu d'utiliser * pour l'ordre 'par défaut'.
requête originale:
select * from foobar
résultats
foo bar
--- ---
1 2
maintenant écris
select bar, foo from foobar
bar foo
--- ---
2 1
Selon http://msdn.Microsoft.com/en-us/library/aa337556.aspx
Cette tâche ne peut pas être effectuée à l'aide d'instructions Transact-SQL.
Eh bien, cela peut être, en utilisant create
copy/drop
/rename, comme indiqué par komma8.komma1
Ou vous pouvez utiliser SQL Server Management Studio
- Dans _/Object Explorer, cliquez avec le bouton droit sur la table avec les colonnes que vous souhaitez réorganiser, puis cliquez sur Design (Modifier en version 2005 SP1 ou antérieure).
- Sélectionnez la case à gauche du nom de la colonne que vous souhaitez réorganiser. (Vous pouvez sélectionner plusieurs colonnes en maintenant les touches [shift] ou Les touches [ctrl] de votre clavier.)
- Faites glisser la ou les colonnes vers un autre emplacement de la table.
Puis cliquez sur Enregistrer. En fait, cette méthode supprime et recrée la table. Certaines erreurs peuvent donc se produire.
Si l'option Change Tracking est activée pour la base de données et la table, vous ne devez pas utiliser cette méthode.
Si cette option est désactivée, l'option Empêcher l'enregistrement des modifications nécessitant la recréation de la table doit être désactivée dans le menu Outils> Options> Designers, sinon "L'enregistrement des modifications n'est pas autorisé" une erreur se produit.
Des problèmes peuvent également survenir lors de la création de clés primaires et étrangères.
Si l'une des erreurs ci-dessus se produit, l'enregistrement échoue, ce qui vous laisse avec l'ordre des colonnes d'origine.
Ceci est similaire à la question sur la commande des enregistrements dans le résultat d'une requête .. et généralement personne n'aime la réponse formellement correcte ;-)
Alors voilà:
select *
ne force pas le renvoi des colonnes dans un ordre particulier.create table' or in the
alter, ajoutez des instructions `Vous pouvez bien sûr changer l'ordre des colonnes dans une instruction SQL. Toutefois, si vous souhaitez abstraire l'ordre des colonnes physiques des tables, vous pouvez créer une vue. c'est à 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
- - -
Vous pouvez le faire en créant une nouvelle table, en copiant toutes les données, en supprimant l'ancienne table, puis en renommant la nouvelle pour remplacer l'ancienne.
Vous pouvez également ajouter de nouvelles colonnes à la table, copier les données colonne par colonne, supprimer les anciennes colonnes, puis renommer les nouvelles colonnes pour les faire correspondre aux anciennes. Un exemple simple ci-dessous: 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
Dans SQLServer Management Studio:
Outils -> Options -> Designers -> Designers de tables et de bases de données
Ensuite:
SQLServer Management studio supprimera la table et la recréera à l'aide des données.
Sql Server construit en interne le script. Il crée une table temporaire avec les nouvelles modifications, copie les données et supprime la table actuelle, puis recrée l'insertion de table à partir de la table temporaire. Je le trouve dans l'option "Générer le script de changement" ssms 2014. Un script comme celui-ci. From Here: Comment modifier l'ordre des colonnes dans une table à l'aide d'une requête 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
Si votre table contient suffisamment de colonnes, vous pouvez essayer ceci. Commencez par créer une nouvelle table avec l’ordre préféré des colonnes.
create table new as select column1,column2,column3,....columnN from table_name;
Maintenant, déposez la table en utilisant la commande drop
drop table table_name;
maintenant renommer la table nouvellement créée à votre ancien nom de table.
rename new to table_name;
maintenant, sélectionnez la table, vous avez vos colonnes réorganisées comme vous préférez avant.
select * from table_name;
Vous pouvez y arriver avec ces étapes:
supprimer toutes les clés étrangères et la clé primaire de la table d'origine.
renommer la table d'origine.
en utilisant CTAS, créez la table d'origine dans l'ordre de votre choix.
laisse tomber la vieille table.
appliquer toutes les contraintes à la table d'origine
Dans SQLServer Management Studio:
Outils -> Options -> Designers -> Designers de tables et de bases de données
Désélectionnez 'Empêcher l'enregistrement des modifications nécessitant la recréation de la table'.
Vous pouvez maintenant réorganiser la table.
À la fin de la journée, vous ne pouvez tout simplement pas faire cela dans MS SQL. J'ai récemment créé des tables à la volée (démarrage de l'application) à l'aide d'une procédure stockée qui lit une table de recherche. Lorsque j'ai créé une vue combinant celles-ci avec une autre table que j'avais précédemment créée manuellement (même schéma, avec les données), cela a échoué - simplement parce que j'utilisais '' Select * UNION Select * 'pour la vue. En même temps, si j'utilise uniquement ceux créés via la procédure stockée, je réussis.
En conclusion: S'il existe une application qui dépend de l'ordre des colonnes, ce n'est vraiment pas une bonne programmation et créera certainement des problèmes dans le futur. Les colonnes doivent "se sentir" libres d'être n'importe où et être utilisées pour tout traitement de données (INSERT, UPDATE, SELECT).
Si les colonnes à réorganiser ont récemment été créées et sont vides, vous pouvez les supprimer et les rajouter dans le bon ordre.
Cela m'est arrivé, en étendant manuellement une base de données pour ajouter de nouvelles fonctionnalités. J'avais manqué une colonne et lorsque je l'ai ajoutée, la séquence était incorrecte.
N'ayant trouvé aucune solution adéquate ici, j'ai simplement corrigé le tableau à l'aide des commandes suivantes.
ALTER TABLE tablename DROP COLUMN columnname;
ALTER TABLE tablename ADD columnname columntype;
Remarque: ne le faites que si vous ne disposez pas de données dans les colonnes que vous supprimez.
Les gens ont dit que l'ordre des colonnes n'avait pas d'importance. J'utilise régulièrement SQL Server Management Studio "générer des scripts" pour créer une version texte du schéma d'une base de données. Pour contrôler efficacement la version de ces scripts (git) et les comparer (WinMerge), il est impératif que le résultat des bases de données compatibles soit identique, et les différences soulignées sont de véritables différences entre les bases de données.
L'ordre des colonnes est important. mais juste pour certaines personnes, pas pour tout le monde!
Essayez cette commande:
alter table students modify age int(5) first;
Cela changera la position d'âge à la première position.
Pour avoir un ordre de colonne spécifique, vous devez sélectionner colonne par colonne dans l'ordre que vous souhaitez .. .. L'ordre de sélection dicte la manière dont les colonnes seront triées en sortie.
Vous pouvez changer cela en utilisant une requête SQL. Voici requête SQL pour changer la séquence de la colonne.
ALTER TABLE table name
CHANGE COLUMN `column1` `column1` INT(11) NOT NULL COMMENT '' AFTER `column2`;