J'ai une base de données SQL Server et j'ai changé d'avis et au lieu d'une colonne de ma table définie comme un On dirait que l'outil a converti les valeurs INT sur Varchars lorsque j'ai sauvegardé les modifications. Je veux changer la valeur de '1' à "externe", "2" à "SPTR" et "3" à "Autre". J'allais faire une valeur à la fois. p> C'est la déclaration SQL simple que j'ai essayée: p> Le message d'erreur que je reçois de SSMS est P> La conversion a échoué lors de la conversion de la valeur VARCHAR 'externe' en type de données INT " P>
BlockQuote> C'est comme si la base de données pense que le type est int code>, je veux le modifier en un varchar code>. J'ai donc changé le type à varchar (8) code> et enregistré mes modifications dans l'outil SQL Server Management Studio (V17.0).
int code>, mais ce n'est pas, c'est varchar (8) p> p>.
3 Réponses :
On dirait que vous n'avez vraiment pas changé le type de données. Ceci devrait em> résoudre le problème. ALTER TABLE mytable ALTER COLUMN mycolumn varchar(8);
GO
UPDATE mytable
SET mycolumn = CASE mycolumn WHEN '1' THEN 'External'
WHEN '2' THEN 'SPTR'
ELSE 'OTHER'
END;
J'ai donc expliqué que la commande Alter Table dans l'outil de gestion Server SQL Server et qui a couru bien. J'ai ensuite couru la commande de mise à jour et elle revient avec la même erreur. Pas sûr de ce qui se passe. Je suis même sorti de l'outil SSM et j'ai redémarré mon système (sachez que cela ne voudrait probablement pas aider), mais je ne sais toujours pas pourquoi cela ne fonctionne pas.
Es-tu compris le Go CODE> @MDMENARD (pas qu'il devrait faire une différence)? I ne peut pas reproduire le problème.
Oui, j'ai aussi eu la déclaration de Go.
Ensuite, je me tiens à mon énoncé de ce que je ne peux pas reproduire le problème, @MDMenard .David Browne pense probablement que le bon chemin de là est un déclencheur ou quelque chose sur la table que vous n'avez pas parlé.
ALTER TABLE mytable ALTER COLUMN mycolumn varchar(50);
SELECT DATALENGTH ('External') returns 8As long as I know varchar does not use all 50 bytes, it only uses 8 in your case to store "External" field, why don't you try to change table size.
Si vous avez changé Si vous obtenez une erreur de conversion de type, je suppose que vous avez une gâchette sur la table qui cause le problème. Vous pourriez avoir peur de dire que le type a changé. Mais même si vous êtes correct, un déclencheur pourrait toujours générer ce problème. P> p> mycolumn code> à une chaîne, vous devez alors fonctionner:
Si cette requête a produit cette erreur, MyColumn n'est pas Varchar (8); C'est un int.
Comme @ Davidbrown-Microsoft, votre changement ne tenait pas. Voici le TSQL
Alter Table Table MyTable Alter Colonne MyColumn Varchar (8) NULL code>. Puis exécutez votre mise à jour à nouveau.Y a-t-il des déclencheurs sur la table?