J'utilise SQL Server 2008 et j'ai besoin d'agrandir un champ VARCHAR, de (200 à 1200) sur une table avec environ 500k lignes. Ce que j'ai besoin de savoir, c'est s'il y a des problèmes que je n'ai pas pris en compte.
J'utiliserai cette instruction TSQL:
ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)
Je l'ai déjà essayé sur une copie des données et cette déclaration n'a eu aucun effet néfaste que je pouvais voir.
Y a-t-il donc des problèmes possibles à faire cela que je n'aurais peut-être pas envisagés?
À propos, la colonne n'est pas indexée.
sql-server
sql-server-2008
varchar
alter-column
Paul T Davies
la source
la source
Réponses:
Il s'agit uniquement d'un changement de métadonnées: c'est rapide.
Une observation: spécifiez NULL ou NOT NULL explicitement pour éviter les "accidents" si l'un des paramètres SET ANSI_xx est différent, par exemple exécuter dans osql et non SSMS pour une raison quelconque
la source
varchar(200)
àvarchar(max)
?Je voulais juste ajouter mes 2 cents, depuis que j'ai googlé cette question car je me suis retrouvé dans une situation similaire ...
SACHEZ que le passage de
varchar(xxx)
àvarchar(yyy)
est un changement de méta-données, mais que le passage àvarchar(max)
ne l'est pas. Parce que lesvarchar(max)
valeurs (aka valeurs BLOB - image / texte, etc.) sont stockées différemment sur le disque, pas dans une ligne de table, mais «hors ligne». Ainsi, le serveur deviendra fou sur une grande table et ne répondra plus pendant des minutes (heures).--no downtime ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(1200) --huge downtime ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(max)
PS. il en va de même pour
nvarchar
ou bien sûr.la source
Le passage à Varchar (1200) à partir de Varchar (200) ne devrait pas vous poser de problème car il ne s'agit que d'un changement de métadonnées et comme SQL Server 2008 tronque les espaces vides excessifs, vous ne devriez voir aucune différence de performance non plus, donc en bref, il ne devrait y avoir aucun problème à faire le changement.
la source
Une autre raison pour laquelle vous devriez éviter de convertir la colonne en varchar (max) est que vous ne pouvez pas créer un index sur une colonne varchar (max).
la source
Dans mon cas, modifier la colonne ne fonctionnait pas, donc on peut utiliser la commande 'Modifier', comme:
alter table [nom_table] MODIFY colonne [nom_colonne] varchar (1200);
la source