我有这样的查询:
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:我设置了LoginID nvarchar(4)
有人可以帮我解释一下吗?以及如何做到对不对?
答案 0 :(得分:4)
如果将@LoginID设置为nvarchar(4),它将截断为该大小,因此实际上您传入的是1111而不是11111111。
答案 1 :(得分:2)
SQL Server以静默方式截断传递给存储过程的值,因此即使传递值“1111111”,它也会被切断为声明的长度(4),因此在存储过程中存在值“1111”。
因此,您应该将参数@LoginID声明为与User表中的LoginID列相同的大小