【发布时间】:2019-01-05 16:31:34
【问题描述】:
我从 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记录一行。
感谢任何帮助。
【问题讨论】:
-
如果主键只有
LoginUID和SealType,那么您需要将表更改为将RegDate也作为主键的一部分。 -
这留下了太多的余地来帮助您...请将表格的
CRATE TABLE语句和它们的示例数据发布为INSERT INTO语句。 -
您使用的是哪个DBMS? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加标签
postgresql、oracle、db2、sql-server、... -
对不起,我正在使用 sql-server
标签: sql insert duplicates