我有一个名为UserList的表,其中包含UserName和UserPassword列。当我查询如下时,它工作并返回正确的数据。
SELECT * FROM dbo.UserList WHERE UserName = 'aliserin'
但是当我尝试如下时,它并没有给我任何结果。它只是返回空。它没有给出错误,但我真的不明白其中的原因。如果重要的话,它是一个本地数据库。
declare
@UserName as NVARCHAR
SET
@UserName = 'aliserin'
SELECT * FROM dbo.UserList WHERE UserName = @UserName
当我在UserId约束上尝试相同的代码时,它可以工作。有谁知道为什么?
DECLARE @UserName1 AS NVARCHAR
SET @UserName1 = 2
SELECT * FROM dbo.UserList WHERE UserId = @UserName1
答案 0 :(得分:4)
您需要为varchar
类型指定长度参数:What is the effect of omitting size in nvarchar declaration
如果未在数据定义或变量声明语句中指定n,则默认长度为1 。如果未使用CAST函数指定n,则默认长度为30。
这意味着您的查询实际上正在执行SELECT * FROM UserList WHERE UserName = 'a'
。
所以你想要:
DECLARE @userName AS nvarchar(8)
SET @userName = 'aliserin'
SELECT * FROM dbo.UserList WHERE UserName = @userName
您还可以使用DECLARE =
语法并省略AS
关键字来简化此操作(我避免使用AS
类型,因为它通常用于别名列名称)
DECLARE @userName nvarchar(8) = 'aliserin'
SELECT * FROM dbo.UserList WHERE UserName = @userName