我从SQL和整个编程开始。
我试图在表中插入一些行,但是如果已经存在具有相同值的行,则会出现错误。
我需要在表“ GPointBagCalender”中添加每个LOGINUID的日期,而SEALTYPE始终等于4。问题是,如果我记录了LOGINUID和日期的重复项,则会给我一个主错误。键。
我尝试了如果不存在
BEGIN
IF NOT EXISTS (SELECT LoginUID, RegDate, SealType
FROM GPointBagCalender
WHERE RegDate = CONVERT(Datetime, '2018-07-25 01:32:00', 120))
BEGIN
INSERT INTO GPointBagCalender
SELECT DISTINCT
g.LoginUID,
CONVERT(Datetime, '2018-07-25 01:32:00', 120), 4
FROM
GPointBag g
END
END
和不存在
INSERT INTO GPointBagCalender
SELECT DISTINCT
g.LoginUID, CONVERT(Datetime, '2018-07-25 01:32:00', 120), 4
FROM
GPointBag g
WHERE
NOT EXISTS (SELECT LoginUID, RegDate, SealType
FROM GPointBagCalender
WHERE RegDate = CONVERT(Datetime, '2018-07-25 01:32:00', 120))
在WHERE NOT EXISTS
的情况下,我收到“受影响的0行”。在IF NOT EXISTS
情况下,它仅执行命令,或者如果没有一个与日期匹配的寄存器,则为每个LOGINUID记录一行。
感谢任何帮助。
答案 0 :(得分:0)
我假设您使用的是MySQL,但这适用于大多数数据库。
使用:INSERT IGNORE INTO
,当遇到重复记录时,它将无提示地忽略错误。
答案 1 :(得分:0)
您可以按照自己的意愿去做:
INSERT INTO GPointBagCalender ( . . . ) -- list the columns here
SELECT DISTINCT g.LoginUID,
CONVERT(Datetime, '2018-07-25 01:32:00', 120), 4
FROM GPointBag g
WHERE NOT EXISTS (SELECT LoginUID, RegDate, SealType
FROM GPointBagCalender gbc
WHERE gbc.LongUID = g.LoginUID AND
RegDate = CONVERT(Datetime, '2018-07-25 01:32:00', 120)
);