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

User テーブルのデータ:

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

このクエリを実行して「1111111」と入力すると、次のレコードが返されました。

1111    abc    abc@yahoo.com

間違った LoginID を入力してもデータが取得されたのはばかげています。

P/S: LoginID を設定しましたnvarchar(4)

誰か説明してくれませんか?そして、それを正しくする方法は?

4

2 に答える 2

2

SQL Server はストアド プロシージャに渡された値をサイレントに切り捨てます。そのため、値 '1111111' を渡しても、宣言された長さ (4) に切り捨てられるため、ストアド プロシージャには値 '1111' があります。

したがって、パラメーター @LoginID を User テーブルの列 LoginID を持つ同じサイズに宣言する必要があります

于 2013-07-23T06:26:36.517 に答える