首页 > 解决方案 > 如何让 SQL 存储过程与 SELECT 参数一起使用?

问题描述

以下是 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保持参数化,它仍然可以正常工作。

它与以下事实有关,@memberidvarchar在下面的摘录中显示为 null,而我可以将@gameid参数保留在其中,因为那是int. 这个对吗?我究竟做错了什么?

@memberID如果我再次运行除了硬编码'1234'而不是参数之外的完全相同的代码

SELECT @lastLoginDate = LoginDate, @lastLoginTime = LoginTime 
FROM Logins 
WHERE LoginDate = (SELECT MAX(LoginDate) 
                   FROM Logins 
                   WHERE MemberID = '1975A' AND GameID = @gameid);

一切正常。

标签: sql-servertsqlstored-proceduresparameters

解决方案


推荐阅读