Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-是否可以使用Where主键='id\u number'_Sql_Primary Key - Fatal编程技术网

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个字段组成!