【问题标题】:How to get primay key constraint name from sql server using java如何使用java从sql server获取主键约束名
【发布时间】:2015-05-15 07:00:38
【问题描述】:

假设我想获取下表的主键约束名称uapplication_pkey

CREATE TABLE application
(
  applicationid integer NOT NULL,
  screatedby character varying(255),
  screatedon timestamp without time zone,
  sfwversion integer,
  smodifiedby timestamp without time zone,
  smodifiedon character varying(255),
  stenantid character varying(255),
  CONSTRAINT uapplication_pkey PRIMARY KEY (applicationid)
)

我从这个How to get the exact "constraint name" from SQLException得到了帮助

但无法找到解决方案。

【问题讨论】:

标签: java sql sql-server


【解决方案1】:

你可以使用DatabaseMetadata接口。

DatabaseMetaData meta = connection.getMetaData();

例子:

DatabaseMetaData meta=conn.getMetaData();
rs= meta.getTables(null, null, tablename, new String[]{"TABLE"});
rs=meta.getPrimaryKeys(null, null, tablename);
while(rs.next())

【讨论】:

    【解决方案2】:

    如果表中只有一个约束,我认为这会有所帮助:

    SELECT OBJECT_NAME(object_id) AS ConstraintName
    FROM sys.objects
    WHERE OBJECT_NAME(parent_object_id)='application' AND type = 'PK'
    

    如果没有,请尝试其他方式访问该表。

    为了根据需要自定义您的查询,您可以查看此SYS.OBJECTS。这肯定会很有帮助;)

    【讨论】:

    • 如果表上有任意数量的约束、触发器、.. 也可以工作,因为使用 此查询将始终返回 0 或 1 条记录(因为它只能每个表有 0 或 1 个 PrimaryKey 约束)
    • @CeOnSql,对,感谢编辑和建议;)
    【解决方案3】:

    还有一个系统存储过程可以帮助你:

    EXEC sp_pkeys 'application'
    

    这将返回一个包含列的结果集:

    • TABLE_QUALIFIER
    • TABLE_OWNER
    • TABLE_NAME
    • COLUMN_NAME
    • KEY_SEQ
    • PK_NAME

    其中 PK_NAME 应该是您的 PK-Constraint 的名称

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 2011-08-16
      • 2012-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多