É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 la MAX résultat en varchar, 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.
InformationsquelleAutor naren | 2013-07-10