sql - 如果不存在则创建表语法 db2

标签 sql database db2 create-table not-exists

我想编写一个 SQL 脚本,在创建表/序列之前检查表/序列是否存在。

我尝试了 Google 并找到了一些适用于其他人但不适用于我的解决方案:

方法一:

SELECT *
FROM   tableA
WHERE  EXISTS
 (SELECT * from tableB);

这与 select 语句一起使用。然后我尝试使用创建表语句:

CREATE TABLE "SMEADM"."JXTEST"  (
          "ACCOUNTSENTRYID" BIGINT NOT NULL  )   
         IN "DATATBSP"
WHERE  EXISTS
 (SELECT * from tableB);

这会遇到错误 42601

方法二:

CREATE TABLE IF NOT EXISTS "SMEADM"."JXTEST"  (
          "ACCOUNTSENTRYID" BIGINT NOT NULL  )   
         IN "DATATBSP" ; 

这也让我遇到错误 42601

方法三:

begin
  declare continue handler for sqlstate '42710' begin end;
  execute immediate 'CREATE TABLE "SMEADM"."JXTEST"  (
          "ACCOUNTSENTRYID" BIGINT NOT NULL  )   
         IN "DATATBSP"';
end

这也让我遇到错误 42601

请指教。

最佳答案

正确的方法是你的第三个选项,但是你必须正确地写它。如果您阅读输出消息,就会发现存在无效字符(42601 SQL 状态)。这是由于没有结束字符的字符串。您不能拥有多行字符串,而必须创建多行并将它们连接起来。

当我运行时:

begin
  declare continue handler for sqlstate '42710' begin end;
  execute immediate 'CREATE TABLE "SMEADM"."JXTEST"  ('
         || ' "ACCOUNTSENTRYID" BIGINT NOT NULL  )   '
         || 'IN "DATATBSP"';
end

我得到了:

begin
  declare continue handler for sqlstate '42710' begin end;
  execute immediate 'CREATE TABLE "SMEADM"."JXTEST"  ('
db2 (cont.) => db2 (cont.) => db2 (cont.) =>          || ' "ACCOUNTSENTRYID" BIGINT NOT NULL  )  '  ;
db2 (cont.) => end@
DB20000I  The SQL command completed successfully.

关于sql - 如果不存在则创建表语法 db2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31804758/

相关文章:

sql - 如何在postgresql中每两周选择和分组

mysql - 如何使用 where in 选择所有具有相同 id 的数据

sql - DB2 SQL : How to 'count' the amount of records returned by a having clause

mysql - 合并或分离表格

c# - 通过发送List<record>发送数据库

c# - 用于在特定文件夹中定位特定文件的自定义路径 c#

php - 存储数据的奇怪字符编码,旧脚本显示它们很好,新脚本却没有

java - 如何将 Hibernate 中的 BigInteger 映射到 DB2

java - OpenJPA 查询第二次失败(可能是因为字节数组参数)

mysql - 确保列中的值不相同