SQL-是否可以使用Where主键='id\u number'
我正试图为我的所有表编写一个通用的“更新”函数。但是,每个主键的名称都不同。那么,有没有可能不使用主键列的名称,而使用自动选择主键列的名称SQL-是否可以使用Where主键='id\u number',sql,primary-key,Sql,Primary Key,我正试图为我的所有表编写一个通用的“更新”函数。但是,每个主键的名称都不同。那么,有没有可能不使用主键列的名称,而使用自动选择主键列的名称 UPDATE .... WHERE PRIMARY KEY = 'id_number' 谢谢 编辑:对不起,我似乎不清楚,但我必须承认我真的不是专家。所以我的想法是,我希望它能在所有表中都只有一个INT类型的主键列的情况下工作。如果可能的话,我希望避免进行两个查询,一个是获取主键列的名称,另一个是查询本身。首先,我想避免必须确保每个表MOU id、rc_i
UPDATE .... WHERE PRIMARY KEY = 'id_number'
谢谢
编辑:对不起,我似乎不清楚,但我必须承认我真的不是专家。所以我的想法是,我希望它能在所有表中都只有一个INT类型的主键列的情况下工作。如果可能的话,我希望避免进行两个查询,一个是获取主键列的名称,另一个是查询本身。首先,我想避免必须确保每个表MOU id、rc_id等的列名称正确……我要说的是,您不能为所有表创建常规更新函数。实际上,按照我的想法,它需要是一个存储过程,但那是另一回事。正如@Martin Smith所指出的,PK可以是复合的。我已经有了PKs,它有四个字段,使之独一无二。你怎么解释呢?此外,PK可以是许多不同的类型。您打算在这个通用存储过程中为所有这些程序编写代码吗?您的代码片段假定PK是字符类型。这看起来不太可能。我确实找到了一些代码,可以让您识别任何表的PK,但是在这之后您还有很多工作要做,您的全部需求还不清楚 在Vault中,这适用于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;
从我要说的是,您不能为所有的表创建通用的更新函数。实际上,按照我的想法,它需要是一个存储过程,但那是另一回事。正如@Martin Smith所指出的,PK可以是复合的。我已经有了PKs,它有四个字段,使之独一无二。你怎么解释呢?此外,PK可以是许多不同的类型。您打算在这个通用存储过程中为所有这些程序编写代码吗?您的代码片段假定PK是字符类型。这看起来不太可能。我确实找到了一些代码,可以让您识别任何表的PK,但是在这之后您还有很多工作要做,您的全部需求还不清楚 在Vault中,这适用于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;
从中,您没有说明RDBMS,但我怀疑它是否存在。一个主键可以由多个列组成。哪个数据库管理系统?这个信息很重要。尽量说清楚。我不认为一个查询就可以做到。可能需要使用信息模式来实现这一点。循环遍历所有表名,找到PK并为每个表生成更新查询您的表可能都有一个整数主键,但您的表是否都有相同的列?如果没有,你将有一个不同的设置。。。每个表的子句。通常每个表的更新过程都是特定于该表的。您可以说,您希望避免必须确保[You]为每个表的[primary key]列具有正确的名称。为主键开发命名约定(如CUSTID,即{tablename}id)是一种很好的做法,这样在编写使用联接的查询时就不必一直查阅表定义。但是关于SQL的一点是,您必须检查列名。有些懒惰是好的,因为它们鼓励效率;但是其他类型的懒惰,嗯,就是懒惰-您没有说明RDBMS,但我怀疑它是否存在。一个主键可以由多个列组成。哪个数据库管理系统?这个信息很重要。尽量说清楚。我不认为一个查询就可以做到。可能需要使用信息模式来实现这一点。循环遍历所有表名,找到PK并为每个表生成更新查询您的表可能都有一个整数主键,但您的表是否都有相同的列?如果没有,你将有一个不同的设置。。。每个表的子句。通常每个表的更新过程都是特定于该表的。您可以说,您希望避免必须确保[You]为每个表的[primary key]列具有正确的名称。为主键开发命名约定(如CUSTID,即{tablename}id)是一种很好的做法,这样在编写使用联接的查询时就不必一直查阅表定义。但是关于SQL的一点是,您必须检查列名。有些懒惰是好的,因为它们鼓励效率;但是其他类型的懒惰,嗯,就是懒惰-是的,你不能保证PK是一个整数,甚至是一个单列——我有一个与Oracle的SAP平台接口的软件,PK由6个字段组成!是的,你不能保证PK是一个整数,甚至是一个单列——我有一个与Oracle的SAP平台接口的软件,PK由6个字段组成!