【问题标题】:If record exits in database update else create new record in database in sql如果数据库更新中存在记录,否则在 sql 中的数据库中创建新记录
【发布时间】:2016-10-29 11:59:33
【问题描述】:

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

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

like if record not exit (create data) else (update data)

我看到了多个链接,但大部分都与程序有关

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

谢谢

【问题讨论】:

  • 如果您要与 4 个不同的数据库供应商合作,最简单的方法是为所有这些供应商编写存储过程。这样您的应用程序代码就不需要知道每个数据库的 sql 方言的确切细节。
  • ANSI SQL 标准操作称为 MERGE,您的三个数据库都支持它......可惜 MySQL 不支持。为了便于管理,无论您采用何种解决方案,您都可能希望将 MERGE 用于 SQL Server、DB2 和 Oracle,以及您为 MySQL 开发的任何解决方案。

标签: mysql sql-server database oracle


【解决方案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');

【讨论】:

    【解决方案2】:

    在这种情况下,您可以使用存储过程:

    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;
    

    希望这会成功。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多