J'essaie la requête suivante et cela fonctionne comme je l'attends
SELECT RIGHT('0000' + CAST(MAX(party_id)+1 AS VARCHAR(4)),4) FROM PARTY
Le résultat est:
0147
Mais quand j'exécute la requête suivante pour que je puisse stocker cette valeur dans une variable
DECLARE @pid varchar; SELECT @pid = RIGHT('0000' + CAST(MAX(party_id)+1 AS VARCHAR(4)),4) FROM PARTY SELECT @pid as party_id
il ne renvoie pas 0147
comme dans la requête ci-dessus, à la place de ce qu'il renvoie
0
Quelqu'un peut-il me dire ce que je fais mal ici?
Vous devriez toujours définir une longueur lorsque vous déclarez un varchar
!!
Ce
DECLARE @pid varchar;
vous donne un varchar
d' exactement une longueur de caractère !!
Utilisation
DECLARE @pid varchar(20);
et votre problème est résolu …
Vous n'avez pas déclaré la taille de varchar, c'est pourquoi il est tronqué. Définir la taille suffisamment grande pour stocker le résultat.
DECLARE @pid varchar(10); SELECT @pid = RIGHT('0000' + CAST(MAX(party_id)+1 AS VARCHAR(4)),4) FROM PARTY SELECT @pid as party_id
De SQL Server MSDN
varchar [(n | max)]
Données de string de longueur variable, non-Unicode. n définit la longueur de la string et peut être une valeur comprise entre 1 et 8 000. max indique que la taille de stockage maximale est de 2 ^ 31-1 octets (2 Go). La taille de stockage est la longueur réelle des données inputs + 2 octets. Les synonymes ISO pour varchar sont char variant ou caractère variable.
Lorsque n n'est pas spécifié dans une définition de données ou une déclaration de déclaration de variable , la longueur par défaut est 1.
DECLARE @pid varchar;
implique un varchar de longueur 1.
Essayez DECLARE @pid varchar(4);