[英]Stored Procedure does not insert data
I am going nuts with a SQL Server stored procedure, it is supposed to register an user into the database (If the user does not already exists). 我对SQL Server存储过程不满意,应该将用户注册到数据库中(如果该用户尚不存在)。 But, after successfully executing the procedure, no data is inserted into the
Users
table. 但是,成功执行该过程后,没有数据插入到
Users
表中。
If I run the insert statement directly, it works. 如果我直接运行insert语句,它将起作用。
Below is the full procedure code, before you ask me, the database is empty. 下面是完整的过程代码,在您询问我之前,数据库为空。
--USERS
CREATE PROCEDURE [dbo].[RegisterUser]
@NAME VARCHAR(255),
@PHONENUMBER VARCHAR(255),
@STATUS INT OUT,
@REMAININGDAYS INT OUT
AS
BEGIN
SET NOCOUNT ON;
UPDATE Users WITH (serializable)
SET Name = @NAME
WHERE PhoneNumber LIKE @PHONENUMBER
SET @REMAININGDAYS = 0
IF @@rowcount = 0
BEGIN
INSERT INTO Users (Name, PhoneNumber, RegisterDate)
VALUES (@NAME, @PHONENUMBER, GETDATE())
SET @STATUS = 0
SET @REMAININGDAYS = 40
END
ELSE
BEGIN
DECLARE @USERID BIGINT
DECLARE @EXP DATETIME
SELECT TOP 1
@USERID = USERID
FROM USERS
WHERE PhoneNumber LIKE @PHONENUMBER
SELECT TOP 1
@EXP = DATEADD(day, DAYS, REGISTERDATE)
FROM SUBSCRIPTIONS
WHERE USERID = @USERID
ORDER BY [REGISTERDATE]
IF @EXP IS NULL
BEGIN
SELECT TOP 1
@EXP = DATEADD(day, 40, REGISTERDATE)
FROM USERS
WHERE USERID = @USERID
IF GETDATE() < @EXP
BEGIN
SET @STATUS = 0
SET @REMAININGDAYS = DATEDIFF(day, GETDATE(), @EXP)
END
ELSE
BEGIN
SET @STATUS = -1
END
END
ELSE
BEGIN
IF GETDATE() < @EXP
SET @STATUS = 1
ELSE
SET @STATUS = -1
END
END
END
I call it passing all parameters. 我称它为传递所有参数。
Thank you! 谢谢!
Statements that make a simple assignment always set the @@ROWCOUNT value to 1. @@ROWCOUNT (Transact-SQL) 进行简单分配的语句始终将@@ ROWCOUNT的值设置为1。 @@ ROWCOUNT(Transact-SQL)
So 所以
DECLARE @i int
SET @i = 0
PRINT @@ROWCOUNT
prints 1. 打印1。
DECLARE @RC INT
UPDATE Users WITH (serializable) SET Name = @NAME
WHERE PhoneNumber LIKE @PHONENUMBER
SET @RC = @@ROWCOUNT
SET @REMAININGDAYS = 0
IF @@RC = 0
BEGIN
INSERT INTO Users <etc...>
Or move SET @REMAININGDAYS = 0
above the update statement so nothing between the update and the test of @@ROWCOUNT
. 或将
SET @REMAININGDAYS = 0
移到更新语句的上方,以便在更新和@@ROWCOUNT
的测试之间不进行任何操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.