sql-server - 如何让 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
保持参数化,它仍然可以正常工作。
它与以下事实有关,@memberid
它varchar
在下面的摘录中显示为 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);
一切正常。
解决方案
推荐阅读
- r - 为什么我使用 R (princomp) 和 Rcmdr pacakges 获得不同的 PCA 结果?
- java - 悬停在文本元素上时如何触发图像弹出
- reactjs - 使用 onChange 将变量传递给类组件
- python - 替换 Numpy 图像中的颜色阈值 - Python
- python - 如何根据变量添加对象?
- clang - Clang 和 Zig 的 main 函数中的编译器设计前端计算
- mysql - mysql如何表示二进制补码
- templates - 为什么我的树枝代码没有在我的视图文件中呈现模板?
- c++ - CMake 将 C++ 参数传递给 nvcc
- amazon-web-services - 再次运行查询时,AWS Athena 查询返回格式不正确的结果