Échec de la Conversion lors de la conversion de la valeur varchar type de données int en sql
J'ai écrit le magasin de la procédure qui doit retourner les valeurs comme-
J1
J2
J3
J'ai table nommée Journal_Entry
. Lorsque le nombre de lignes de la table est de 0, cela donne le résultat J1
mais comme le nombre de lignes augmente, il affiche l'erreur-
"Conversion failed when converting the varchar value 'J' to data type int."
#ici le Voucher_No
est la colonne pour que le résultat soit enregistré.
Le code, c'est comme-
CREATE PROC [dbo].[getVoucherNo]
AS
BEGIN
DECLARE @Prefix VARCHAR(10)='J'
DECLARE @startFrom INT=1
DECLARE @maxCode VARCHAR(100)
DECLARE @sCode INT
IF((SELECT COUNT(*) FROM dbo.Journal_Entry) > 0)
BEGIN
SELECT @maxCode = CAST(MAX(CAST(SUBSTRING(Voucher_No,LEN(@startFrom)+1,LEN(Voucher_No)- LEN(@Prefix)) AS INT)) AS varchar(100)) FROM dbo.Journal_Entry;
SET @sCode=CAST(@maxCode AS INT)
SELECT @Prefix + LEN(CAST(@maxCode AS VARCHAR(10))+1) + CAST(@maxCode AS VARCHAR(100))
END
ELSE
BEGIN
SELECT(@Prefix + CAST(@startFrom AS VARCHAR))
END
END
- Si possible, il serait préférable de stocker le préfixe et le numéro des colonnes séparées - il rend le code comme ci-dessus considérablement plus facile à écrire. Si le préfixe est toujours
J
qui ne doivent pas être stockés à tous. Et vous pouvez toujours créer une colonne calculée qui les combine dans une seule colonne, si vous avez vraiment besoin de cela. - Je suis également du mal à comprendre pourquoi vous feriez
CAST
laMAX
résultat envarchar
, juste à, sur la ligne suivante,CAST
il est de retour àint
. - en fait j'ai besoin de la suite que J1,J2, de sorte qu'il peut être montré dans l'application comme bon nombre et également stockées dans la colonne unique.
- vous ne devriez pas baser votre structure de base de données autour de votre écran ou d'exigences de mise en forme. Logiquement, le nombre et le préfixe sont deux éléments de données sur laquelle vous voulez effectuer le traitement qu'ils devraient l'être dans des colonnes distinctes.
Vous devez vous connecter pour publier un commentaire.
Le problème située sur la ligne suivante
Utiliser ce lieu
Code Complet:
J'ai eu le même message d'erreur. Dans mon cas, c'était en raison de ne pas utiliser les guillemets.
Bien que la colonne était censé avoir uniquement des nombres, c'était une colonne de type Varchar, et l'une des lignes avait une lettre en elle.
Donc j'ai fait ça:
Alors que je devrais être en train de faire ceci:
Si la colonne a tous les nombres, la conversion aurait fonctionné, mais pas dans ce cas.
Votre problème coutures pour être situé ici:
Que l'erreur dit, vous êtes la conversion d'une chaîne qui contient la lettre " J " pour un
INT
qui, pour des raisons évidentes, n'est pas possible.Corriger
SUBSTRING
ou ne stockez pas la lettre " J " dans la base de données et seulement ajouter lors de la lecture.La ligne
est faux.
@Prefix
est'J'
etLEN(...anything...)
est unint
, d'où l'incompatibilité de type.Il me semble que vous voulez vraiment faire,
mais, je ne pouvais pas le dire. Si vous illustrée avant et après les données, il pourrait l'aider.
Essayez celui -
CAST
tronquée de la valeur de @maxCode, doncCAST(@maxCode AS VARCHAR(10)
est égal àLEFT(@maxCode, 10)
.