0

我有一个这样的查询:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[User_SelectByLoginID]
@LoginID nvarChar(4)
as
SELECT dbo.[User].*
FROM  dbo.[User]
WHERE LoginID=@LoginID

和用户表中的数据:

LoginID ='1111'  |  Name ='abc'  |  Email = 'abc@yahoo.com'

当我执行此查询并输入“1111111”时,它返回了记录:

1111    abc    abc@yahoo.com

当我输入错误的 LoginID 并且仍然获得数据时,这很荒谬。

P/S:我设置了LoginIDnvarchar(4)

有人可以为我解释吗?以及如何使它正确?

4

2 回答 2

5

如果您将@LoginID 设置为 nvarchar(4),它将截断为该大小,因此您实际上传递的是 1111 而不是 11111111。

于 2013-07-23T06:22:33.140 回答
2

SQL Server 会默默地截断传递给存储过程的值,因此即使传递值“1111111”,它也会被截断为声明的长度 (4),因此在存储过程中有一个值“1111”。

因此,您应该将参数 @LoginID 声明为与 User 表中的 LoginID 列相同的大小

于 2013-07-23T06:26:36.517 回答