Ali*_*der 19 sql-server merge stored-procedures sql-server-2000 upsert
如果没有用于插入表的记录,我想检查表PREMIUM_SERVICE_USER是否存在
strClientID更新timeValid+30的记录.strClientIDpremium_service_user
我究竟做错了什么?
它增加timeValid了+30天,但也插入了另一行.
SELECT @pre_var = count(*)
FROM PREMIUM_SERVICE_USER
WHERE strClientID = @strClientID
/* bronze premium - 200 cash */
IF @Premium = 1
BEGIN
INSERT INTO PREMIUM_SERVICE_USER
(strClientID, timeReg, timeValid, bCurrent, durum)
VALUES
(@strClientID,getdate(),getdate() + 30,'1','1')
UPDATE TB_USER
SET cash = cash+200
WHERE strAccountID = @strClientID
END
IF @Premium = 1 AND @pre_var = 1
BEGIN
UPDATE PREMIUM_SERVICE_USER
SET timevalid = timevalid+30 where strClientID = @strClientID
UPDATE PREMIUM_SERVICE_USER
SET bCurrent = 1 where strClientID = @strClientID
UPDATE TB_USER
SET cash = cash+200 WHERE strAccountID = @strClientID
END
Run Code Online (Sandbox Code Playgroud)
Don*_*nie 17
你的问题是第一次运行if而不考虑值@pre_var.
这是一种略微不同的做法,如果PREMIUM_SERVICE_USER很大,效率会略高一些.
if @Premium = 1
begin
if exists(Select 1 From PREMIUM_SERVICE_USER Where strClientID = @strClientID)
BEGIN
update PREMIUM_SERVICE_USER set timevalid = timevalid+30 where strClientID = @strClientID
update PREMIUM_SERVICE_USER set bCurrent = 1 where strClientID = @strClientID
UPDATE TB_USER SET cash = cash+200 WHERE strAccountID = @strClientID
END
ELSE
BEGIN
INSERT INTO PREMIUM_SERVICE_USER (strClientID, timeReg, timeValid, bCurrent, durum) VALUES (@strClientID,getdate(),getdate() + 30,'1','1')
UPDATE TB_USER SET cash = cash+200 WHERE strAccountID = @strClientID
END
end
Run Code Online (Sandbox Code Playgroud)
小智 5
CREATE PROCEDURE sp_UpdateProcessed
AS
BEGIN
DECLARE @Processed_Status NVARCHAR(256)
SET @Processed_Status = 'ACTIVE'
IF(@Processed_Status <> 'Processed')
BEGIN
SET @Processed_Status = 'Active'
UPDATE ST_JnlMediumMoveNew
SET ST_JnlMediumMoveNew.Process_Status = @Processed_Status
END
END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68218 次 |
| 最近记录: |