[英]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.