Je souhaite modifier une colonne dans SQL Server de type int, pour taper du texte, tout en conservant le nom de la colonne. Le tableau avec cette colonne a beaucoup de données, et je ne veux pas le perdre. SQL Server ne semble pas prendre en charge les conversions implicites ou explicites de l'int vers le texte, sinon ce serait assez simple. Alors, comment le feriez-vous en utilisant seulement SQL?Dans SQL Server, modifiez la colonne de type int pour entrer du texte
Répondre
Étant donné que MS SQL Server (comme la plupart des bases de données) ne prend pas en charge la modification directe du type d'une colonne existante, vous devrez le faire par étapes. La façon dont je l'ai résolu des problèmes comme celui-ci dans le passé est (en supposant que votre table est nommée « foo » et votre colonne est nommé « bar »):
ALTER TABLE foo ADD COLUMN tempbar text;
UPDATE foo SET tempbar = cast(cast(bar as varchar) as text);
ALTER TABLE foo DROP COLUMN bar;
ALTER TABLE foo ADD COLUMN bar text;
UPDATE foo SET bar = tempbar;
ALTER TABLE foo DROP COLUMN tempbar;
(Une partie de la syntaxe SQL peut être désactivé, il a été un an depuis que je l'ai fait, à un autre travail, donc je n'ai pas accès à MS SQL Server ou la source. Vous aurez également à faire plus de choses si votre colonne a un index sur elle.)
Propose à Donnie pour la syntaxe de conversion.
[Modifier]
Tom H. a suggéré d'utiliser la procédure stockée sp_rename renommer tempbar
comme bar
(au lieu des étapes 4-6). C'est une solution spécifique à MS SQL Server qui peut fonctionner dans de nombreuses circonstances. La solution que j'ai décrite fonctionnera (avec des révisions syntaxiques) sur n'importe quelle base de données SQL, indépendamment de la version. Dans mon cas, je travaillais avec des clés primaires et étrangères, et pas seulement un seul champ, donc j'ai dû soigneusement commander toutes les opérations ET être portable sur plusieurs versions de MS SQL Server - étant explicite travaillé en ma faveur.
Au lieu de supprimer, rajouter et remplir la barre, vous pouvez simplement le supprimer et renommer tempbar. –
sp_rename ne fonctionnera pas dans Sql CE. – Edgar
Il vous suffit de doubler le type intermédiaire pour obtenir ce que vous voulez.
cast(cast(intField as varchar) as text)
Voici un petit script d'exemple qui montre la méthode possible:
create table test (id int)
create table test_tmp (id ntext)
insert into test
values (1)
insert into test
values (2)
insert into test_tmp
select convert(ntext,cast(id as nvarchar)) from test
drop table test
exec sp_rename 'test_tmp','test'
Fondamentalement, nous créons une copie de la table, puis le remplir. Nous convertissons d'abord l'int en nvarchar puis nous prenons une valeur de texte. Enfin, nous laissons tomber l'ancienne table et renommons la table temporaire.
- 1. Tri de la colonne Flottante vs la colonne Int dans SQL Server
- 2. insert int dans la colonne xml sql
- 3. SQL Server: la récupération longueur du type de données
- 4. Sql Type de données pour la clé primaire - SQL Server?
- 5. Incrémentation de la colonne int dans la table MS SQL Server via SP
- 6. Colonne Recherche et recherche de texte intégral dans SQL Server
- 7. Utilisation correcte du type de données XML dans SQL Server?
- 8. Création d'une colonne de texte dans une table SQL Server: quel type dois-je choisir?
- 9. Sélectionnez l'emplacement du motif dans la colonne de texte. sql server 2005
- 10. Le moyen le plus rapide pour modifier le type de données de colonne dans SQL Server
- 11. Réplication SQL Server par mappage de colonne
- 12. colonne Alter type de données dans SQL
- 13. Type de données de chaîne de caractères à Int dans SQL QUery pour MS Access
- 14. SQL Int type Valeur par défaut Question
- 15. SQL Server: convertir ((int) année, (int) mois, (int) jour) datetime
- 16. Ordre par Clause pour la colonne NVARCHAR dans SQL Server
- 17. Modification du nom de colonne dans SQL Server 2000
- 18. Utilisation du type de colonne SQL uniqueidentifier avec Entity Framework
- 19. type de int * (*) (int *, int * (*)())
- 20. La colonne Type de l'index de texte intégral est vide
- 21. Relations de colonne SQL Server
- 22. SQL Server: Copie de la colonne dans la table
- 23. SQL Server: colonne incohérence
- 24. Spécifiez le type de données avec alias de colonne dans SQL Server 2008
- 25. Un Int Unigned de 4 octets pour Sql Server 2008?
- 26. ligne convertir à la colonne dans SQL Server 2008
- 27. Utilisation du type de données XML SQL Server
- 28. Affichage du texte dans la colonne correcte
- 29. SQL Server - Comment insérer dans la colonne Varbinary (Max)?
- 30. Comment créer un index pour la recherche avec caractères génériques sur une colonne Int dans SQL Server?
'text', ou 'varchar'? –
Il y a quelques réponses qui devraient vous aider à traverser votre problème, mais je voudrais juste ajouter que le type de données TEXT a beaucoup de "gotchas". Vous êtes presque certainement mieux d'utiliser VARCHAR (MAX) ou NVARCHAR (MAX) en supposant que votre SQL à 2005 ou plus tard. Même si ce n'est pas le cas, pensez à utiliser un très grand VARCHAR ou NVARCHAR à la place. –
une raison particulière pour le texte au lieu de nvarchar (max)? – DForck42