如果记录退出数​​据库更新,则在sql中的数据库中创建新记录

时间:2016-06-27 12:52:41

标签: mysql sql-server database oracle

我有4个数据库:sql server,MySql,DB2和Oracle 我想写一些带有一些新记录的脚本, 但是有些记录可能已经退出 因此,如果yjr数据库更新中的记录退出需要执行,则在sql中的数据库中创建新记录。

是否可以使用脚本而不是程序编写?

如果记录不退出(创建数据)其他(更新数据)

我看到了多个链接,但大多数只与程序相关

sql - query to insert a column value if it does not exist in that column

http://www.codeproject.com/Questions/162627/how-to-insert-new-record-in-my-table-if-not-exists

谢谢

2 个答案:

答案 0 :(得分:1)

要拥有统一的跨RDBMS SQL,您可能希望在SQL Server,MySQL和DB2中创建DUAL表:

CREATE TABLE DUAL (DUMMY VARCHAR(1));
INSERT INTO DUAL (DUMMY) VALUES ('X');

然后,对于每条记录,您将能够:

UPDATE Table SET Column = 'Value' WHERE PK = 'ID';
INSERT INTO Table (Column, PK)
SELECT 'Value', 'ID' FROM DUAL
WHERE NOT EXISTS(SELECT '*' FROM Table WHERE PK = 'ID');

如果创建DUAL不是一个选项,可以通过以下方式实现:

UPDATE Table SET Column = 'Value' WHERE PK = 'ID';
INSERT INTO Table (Column, PK)
SELECT 'Value', 'ID' FROM (SELECT Count(*) As DUMMY FROM Table) DUAL
WHERE NOT EXISTS(SELECT '*' FROM Table WHERE PK = 'ID');

答案 1 :(得分:0)

在这种情况下,您可以使用商店程序:

SET @s = (SELECT IF((SELECT @catID := cat_id FROM category WHERE name = 'cat name' limit 1) > 0,
          'UPDATE STATEMENT','INSERT STATEMENT'));
select @s;
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

希望这会成功。