SQL Server: comment utiliser les variables?

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);