【问题标题】:SQL - Is it possible to use Where Primary key = 'id_number'SQL - 是否可以使用 Where Primary key = 'id_number'
【发布时间】:2012-07-11 15:31:00
【问题描述】:

我正在尝试为我的所有表编写一个通用的“更新”函数。但是,每个主键的名称都不同。那么是否有可能,而不是使用主键列的名称,而是使用类似自动选择主键列的东西?

UPDATE .... WHERE PRIMARY KEY = 'id_number'

谢谢!

编辑:抱歉,我好像不太清楚,但我必须承认我真的不是专家。所以我的想法是,我希望它适用于所有只有一个 INT 类型主键列的表。如果可能的话,我希望避免进行两个查询(一个用于获取主键列的名称 + 查询本身)。起初,我想避免必须确保每个表的列名正确(mo_id、rc_id 等...)。

【问题讨论】:

  • 您没有声明 RDBMS,但我对此表示怀疑。对于初学者来说,主键可以是复合的(多列)。
  • 哪个 DBMS?这个信息很重要。尽量保持清晰。
  • 我不认为它可以通过一个查询来完成。可能需要使用信息模式来实现这一点。遍历所有表名,找到PK并为每个表生成更新查询
  • 您的表可能都有一个 INTEGER 主键,但您的表是否都具有相同的列?如果没有,每个表都有不同的 SET... 子句。通常每个表的更新过程都是特定于该表的。
  • 你说你want to avoid having to make sure [you] have the right name of the [primary key] column for each table。为主键开发命名约定(如 CUSTID,即 {tablename}id)是一种很好的做法,这样您在编写使用连接的查询时就不必继续查阅表定义。但是关于 SQL 的一件事——你必须检查你的列名。有些懒惰是好的,因为它们鼓励效率;但其他类型的懒惰,嗯,只是懒惰。 :-)

标签: sql primary-key


【解决方案1】:

我要说的是,您不能为所有表创建通用更新功能。实际上它需要是一个存储过程,就像我想的那样,但那是另一回事。正如@Martin Smith 指出的那样,PK 可以是复合的。我的 PK 绑定了四个字段以使其独一无二。你怎么能解释呢?此外,PK 可以是多种不同的类型。你打算在这个通用存储过程中为所有这些代码编写代码吗?您的 sn-p 假定 PK 是 char 类型。这看起来不太合理。我确实找到了一些代码来让您识别任何表的 PK,但是在那之后您还有很多工作要做,而且您的全部要求还不清楚。

从保管库(这适用于 SQL Server):

 SELECT KU.table_name as tablename,column_name as primarykeycolumn
 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC
 INNER JOIN
 INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KU
 ON TC.CONSTRAINT_TYPE = 'PRIMARY KEY' AND
 TC.CONSTRAINT_NAME = KU.CONSTRAINT_NAME
 and ku.table_name='yourTableName'
 ORDER BY KU.TABLE_NAME, KU.ORDINAL_POSITION;

来自SQL Server: Get table primary key using sql query

【讨论】:

  • 是的,你不能保证 PK 是 int 甚至是单列 - 我有一个与 Oracle 的 SAP 平台接口的软件,PK 由 6 个字段组成!
猜你喜欢
  • 2021-03-02
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 2016-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多