以下是SQL Server存储过程的摘录:
ALTER PROCEDURE [dbo].[spAddLogin]
@gameid INT,
@serverid INT,
@memberid VARCHAR(15)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @lastLoginTime datetime
DECLARE @lastLoginDate datetime
DECLARE @isRelogin bit
SELECT
@lastLoginDate = LoginDate,
@lastLoginTime = LoginTime
FROM
Logins
WHERE
LoginDate = (SELECT MAX(LoginDate)
FROM Logins
WHERE MemberID = @memberid AND GameID = @gameid);
当我运行此存储过程并输出@lastLoginDate
和@lastLoginTime
时,我得到的是空值。
但是,在经过许多挫折和测试之后,我发现当我对输入参数@memberid
和@gameid
的值进行硬编码时,它可以正常工作。实际上,如果我对@memberid
进行硬编码并保留@gameid
的参数设置,它仍然可以正常工作。
它与@memberid
是varchar
的事实有关,在下面的摘录中它作为null出现,而我可以保留@gameid
参数,因为那是int
。它是否正确?我究竟做错了什么?
同样,如果我运行完全相同的代码,除了硬代码“ 1234”而不是@memberID
参数
SELECT @lastLoginDate = LoginDate, @lastLoginTime = LoginTime
FROM Logins
WHERE LoginDate = (SELECT MAX(LoginDate)
FROM Logins
WHERE MemberID = '1975A' AND GameID = @gameid);
一切正常。