繁体   English   中英

存储过程不插入数据

[英]Stored Procedure does not insert data

我对SQL Server存储过程不满意,应该将用户注册到数据库中(如果该用户尚不存在)。 但是,成功执行该过程后,没有数据插入到Users表中。

如果我直接运行insert语句,它将起作用。

下面是完整的过程代码,在您询问我之前,数据库为空。

--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

我称它为传递所有参数。

谢谢!

进行简单分配的语句始终将@@ ROWCOUNT的值设置为1。 @@ ROWCOUNT(Transact-SQL)

所以

DECLARE @i int
SET @i = 0
PRINT @@ROWCOUNT

打印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...>

或将SET @REMAININGDAYS = 0移到更新语句的上方,以便在更新和@@ROWCOUNT的测试之间不进行任何操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM