Select ne fonctionne pas avec une variable dans SQL Server 2017

J'ai une table appelée UserList qui a des colonnes UserName et UserPassword. Lorsque je interroge comme ci-dessous, il fonctionne et renvoie les bonnes données.

SELECT * FROM dbo.UserList WHERE UserName = 'aliserin' 

Mais quand je l'essaye comme ci-dessous, ça ne me donne aucun résultat. Il revient juste vide. Cela ne donne pas d'erreur, mais je n'ai vraiment pas compris la raison. C'est une database locale si c'est important.

 declare @UserName as NVARCHAR SET @UserName = 'aliserin' SELECT * FROM dbo.UserList WHERE UserName = @UserName 

Lorsque j'essaie le même code sur la contrainte UserId comme ci-dessous, cela fonctionne. Est-ce que quelqu'un a une idée pourquoi?

 DECLARE @UserName1 AS NVARCHAR SET @UserName1 = 2 SELECT * FROM dbo.UserList WHERE UserId = @UserName1 

Vous devez spécifier un paramètre de longueur pour le type varchar : Quel est l'effet de l'omission de la taille dans la déclaration nvarchar?

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 . Lorsque n n'est pas spécifié avec la fonction CAST, la longueur par défaut est 30.

Cela signifie que votre requête est en train de faire SELECT * FROM UserList WHERE UserName = 'a' .

Alors tu veux:

 DECLARE @userName AS nvarchar(8) SET @userName = 'aliserin' SELECT * FROM dbo.UserList WHERE UserName = @userName 

Vous pouvez également simplifier cela en utilisant la syntaxe DECLARE = et en omettant le mot-key AS (j'évite d'utiliser AS pour les types car il est généralement utilisé pour alias les noms de colonne)

 DECLARE @userName nvarchar(8) = 'aliserin' SELECT * FROM dbo.UserList WHERE UserName = @userName