T-SQL: Conversion de NTEXT en VARCHAR en INT / BIGINT

J'ai une table avec un champ de type NTEXT qui stocke beaucoup de type de valeurs, de taille de file parmi eux. J'essaie d'exécuter une requête sur une list d'loggings et d'additionner les tailles de file, mais je rencontre ce problème embarrassant.

Comme NTEXT ne peut pas être converti directement ou implicitement en INT ou en BIGINT , je le convertis d'abord en VARCHAR puis j'essaye de le convertir en INT ou en BIGINT. Tout se passe bien jusqu'à ce que j'essaie de convertir la valeur VARCHAR en INT ou en BIGINT .

Voici mes requêtes et résultats:

D'abord j'essaie ce qui suit, qui ne montre aucun problème et la sortie est 61069 (valeur toujours comme type ntext).

SELECT FileSize FROM dbo.myTable WHERE ID = 111 

Maintenant, je convertis / cast comme varchar, et encore, pas de problème. La sortie est 61069 (maintenant le type varchar).

 SELECT CONVERT(VARCHAR, FileSize) FROM dbo.myTable WHERE ID = 111 

Enfin, j'essaie de convertir la valeur VARCHAR en BIGINT afin que je puisse faire mon SUM () et d'autres calculs, mais cette fois je reçois un message " Erreur lors de la conversion du type de données varchar en bigint. "

 SELECT CONVERT(BIGINT, CONVERT(VARCHAR, FileSize)) FROM dbo.myTable WHERE ID = 111 

Et si j'essaye de le convertir en INT à la place, j'obtiens une " conversion échouée en convertissant la valeur de varchar '7/1/2008 3:39:30 AM' en type de données int "

 SELECT CONVERT(INT, CONVERT(VARCHAR, FileSize)) FROM dbo.myTable WHERE ID = 111 

Je suis absolument perdu, des idées de ce qui pourrait causer cela?

    Vous ne pouvez pas contrôler l'ordre dans lequel la clause where et les conversions s'appliquent. Dans certains cas, SQL Server tentera d'effectuer la conversion sur des lignes qui ne passeront pas le filter – tout dépend du plan. Essayez ceci à la place:

     SELECT CASE WHEN ID = 111 THEN CONVERT(INT, CONVERT(VARCHAR(12), FileSize)) -- don't be lazy, size ------^^ is important END FROM dbo.myTable WHERE ID = 111; 

    Envisagez également d'utiliser une colonne entière pour stocker des entiers. Ensuite, vous ne FileSize pas avec un non-sens maladroit dans la colonne FileSize comme '7/1/2008 3:39:30 AM' .