J'ai écrit la procédure de magasin qui doit renvoyer les valeurs comme- J'ai la table nommée Le Le code est comme - p> journal_enterry code>. Lorsque le nombre de lignes de la table est 0, il donne le résultat J1 code> mais comme augmente le nombre de lignes, il affiche l'erreur - p> Voucher_no code> est la colonne du résultat à enregistrer. p>
5 Réponses :
Vos coutures de problèmes à être localisées ici:
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)
Essayez celui-ci -
CREATE PROC [dbo].[getVoucherNo]
AS BEGIN
DECLARE
@Prefix VARCHAR(10) = 'J'
, @startFrom INT = 1
, @maxCode VARCHAR(100)
, @sCode INT
IF EXISTS(
SELECT 1
FROM dbo.Journal_Entry
) BEGIN
SELECT @maxCode = CAST(MAX(CAST(SUBSTRING(Voucher_No,LEN(@startFrom)+1,ABS(LEN(Voucher_No)- LEN(@Prefix))) AS INT)) AS varchar(100))
FROM dbo.Journal_Entry;
SELECT @Prefix +
CAST(LEN(LEFT(@maxCode, 10) + 1) AS VARCHAR(10)) + -- !!! possible problem here
CAST(@maxCode AS VARCHAR(100))
END
ELSE BEGIN
SELECT (@Prefix + CAST(@startFrom AS VARCHAR))
END
END
Cast Code> Valeur tronquée de @maxcode, donc Cast (@maxcode comme Varcharchar (10) code> est égal à gauche (@maxcode, 10) code>.
La ligne est incorrecte. p> Il me semble que vous voulez réellement faire , P> @prefix code> est 'J' code> et et Len (... n'importe quoi ...) code> est un int code>, d'où l'inadéquation de type. P>
SELECT
@maxCode = MAX(
CAST(SUBSTRING(
Voucher_No,
@startFrom + 1,
LEN(Voucher_No) - (@startFrom + 1)) AS INT)
FROM
dbo.Journal_Entry;
SELECT @Prefix + CAST(@maxCode AS VARCHAR(10));
Le problème situé sur la ligne suivante
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(VoucharNo,LEN(@startFrom)+1,LEN(VoucharNo)- LEN(@Prefix)) AS INT))+1 AS varchar(100)) FROM dbo.Journal_Entry;
SET @sCode=CAST(@maxCode AS INT)
SELECT @Prefix + CAST(LEN(CAST(@maxCode AS VARCHAR(10))+1) AS VARCHAR(100)) + CAST(@maxCode AS VARCHAR(100))
END
ELSE
BEGIN
SELECT(@Prefix + CAST(@startFrom AS VARCHAR))
END
END
Après l'édition, cela fonctionnait, mais pourquoi il ajoute le numéro après le préfixe 'J'?
@Droid_RUSH, cette réponse identifie le même problème que ma réponse, une heure plus tard. Stackoverflow.com/a/17568151/659190 .
J'ai le même message d'erreur. Dans mon cas, cela devait utiliser des citations.
Bien que la colonne n'ait censé avoir que des chiffres, il s'agissait d'une colonne Varcharne et une des lignes avait une lettre dedans. P>
Donc, je faisais cela: P>
select * from mytable where myid = '1234'
Si possible, il serait préférable de stocker le préfixe et le nombre dans des colonnes séparées - il rend le code tel que le plus précisément plus facile à écrire. Si le préfixe est toujours
j code> qui n'a pas besoin de ne pas être stocké du tout. Et vous pouvez toujours créer une colonne calculée qui les combine ensemble dans une seule colonne, si vous en avez vraiment besoin.Je suis aussi en difficulté pour comprendre pourquoi vous
CAST CODE> Lemax code> résultat dos i> à unvarchar code>, juste pour , sur la ligne suivante,couler code> retour àint code>.En fait, j'ai besoin du résultat que J1, J2 de sorte qu'il puisse être montré dans l'application en tant que numéro de bon de bon et aussi stocké dans la colonne unique.
Vous ne devriez pas baser votre structure de base de données autour de votre Afficher i> ou Formatage i>. Logiquement, le nombre et le préfixe sont deux éléments de données distincts sur lesquels vous souhaitez effectuer le traitement - ils doivent être dans des colonnes séparées.