Select在SQL Server 2017

时间:2017-09-03 00:14:38

标签: sql-server

我有一个名为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

1 个答案:

答案 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