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