我有一个表格,可以为特定用户分配角色。我正在对这个表进行大规模更新,在这里我最终约会了一些用户以前的角色,然后通过插入到这个表中完成了为他们分配新角色。
我正在分别做这两个动作。对于我的第一个动作,我的代码是这样的。
UPDATE userrolelist
SET effectiveend = '2016-01-20 00:00:00.000'
where userid IN ('150920','160847','160848','160849')
and roleid = '1037' and effectiveend IS NULL
如果没有为该角色分配结束日期,但如果有一个用户的结束日期,整个更新语句将终止,则此方法有效。我想使用IF EXISTS语句首先检查此用户的结束日期是否存在,如果没有,则更新否则不执行任何操作。
插入类似。我正在运行基于需要具有新角色的用户的100个插入。现在再次当我运行这些插入语句时,如果它找到任何重复项,则会出错。
Insert into userrolelist (Userid, Roleid, IsDefault, EffectiveStart,
EffectiveEnd, Clientid, LastmodifiedUserId, LastmodifiedTimestamp)
Values
(161514,1011,1,'2016-01-21 00:00:00.001',Null,16785,0,'2016-01-21
00:00:00.001')
表格结构:
答案 0 :(得分:2)
我不确定我是否理解你的问题,但也许你可以试试这个:
UPDATE A SET EFFECTIVEEND = '2016-01-20 00:00:00.000'
FROM USERROLELIST A
WHERE A.USERID IN ('150920','160847','160848','160849')
AND A.ROLEID = '1037' AND A.EFFECTIVEEND IS NULL
AND NOT EXISTS(SELECT 1 FROM USERROLELIST B WHERE B.USERID IN ('150920','160847','160848','160849') AND B.effectiveend IS NOT NULL) ;
示例数据:
CREATE TABLE USERROLELIST (USERID INT, ROLEID INT, EFFECTIVEEND DATETIME);
INSERT INTO USERROLELIST VALUES (150920, 1037,NULL);
INSERT INTO USERROLELIST VALUES (160847, 1037,NULL);
INSERT INTO USERROLELIST VALUES (160848, 1037,NULL);
INSERT INTO USERROLELIST VALUES (160849, 1037,NULL);
INSERT INTO USERROLELIST VALUES (160850, 1037,NULL);
输出:
USERID ROLEID EFFECTIVEEND
150920 1037 2016-01-20 00:00:00.000
160847 1037 2016-01-20 00:00:00.000
160848 1037 2016-01-20 00:00:00.000
160849 1037 2016-01-20 00:00:00.000
160850 1037 NULL
样品2:
TRUNCATE TABLE USERROLELIST
INSERT INTO USERROLELIST VALUES (150920, 1037,NULL);
INSERT INTO USERROLELIST VALUES (160847, 1037,NULL);
INSERT INTO USERROLELIST VALUES (160848, 1037,NULL);
INSERT INTO USERROLELIST VALUES (160849, 1037,NULL);
INSERT INTO USERROLELIST VALUES (160850, 1037,NULL);
UPDATE USERROLELIST SET EFFECTIVEEND='20160119' WHERE USERID=150920;
输出:
USERID ROLEID EFFECTIVEEND
150920 1037 2016-01-19 00:00:00.000
160847 1037 NULL
160848 1037 NULL
160849 1037 NULL
160850 1037 NULL