没有主键的表的更新查询的语法是什么?
免责声明:令人沮丧的是,添加主键不是一种选择。我的程序是一个较大的系统中的一个小程序,数据管理很差。我的开发时间不包括重写其他软件。
注意:数据库是Microsoft Access。
注意:类似于:Excel: TableAdapter UpdateCommand for table without primary key
更新:我说的是,“如果数据库中的表没有明确的主键,那么就没有有效的TableAdapter UpdateCommand吗?”
答案 0 :(得分:3)
没有什么不同,如果你有一个主键。但是,您必须设置某种where子句,以允许您唯一地标识行。
答案 1 :(得分:2)
如果没有明确的主键,则至少应该有一个隐式主键(即使它是每列)。如果没有任何密钥,您将无法安全地更新表格。
如果在创建数据集时浏览向导,则应获得包含类似于此的更新语句的更新查询:
update TableA set Column1 = @Column1, Column2 = @Column2 ... where Column1 = @PreviousColumn1 and Column2 = @PreviousColumn2 ...
修改强> 如果您不想完成该步骤,则必须创建类似于上述查询的查询。
如果没有桌面上的PK,您将无法使用该向导进行更新或删除命令。但是,您可以制作Access文件的副本,将PK放在表中(如果无法派生短的隐式键,则可能必须使用每一列)并使用该文件通过向导创建命令。 / p>
@PreviousColumnX
参数的SourceVersion
值设置为Original
。update TableA
set Column1 = @Column1, Column2 = @Column2 ...
where (Column1 = @PreviousColumn1 or @PreviousColumn1 is null)
and Column2 = @PreviousColumn2 ...
答案 2 :(得分:0)
您使用的是哪个DBMS?在Oracle(可能还有其他人,但我有更多使用Oracle的经验)上,有一个ROWID伪列可以用作唯一的行标识符,即使没有主键也是如此