MS-Access:没有主键的表的TableAdapter UpdateCommand

时间:2010-03-15 19:23:50

标签: sql vb.net ms-access dataset strongly-typed-dataset

没有主键的表的更新查询的语法是什么?

免责声明:令人沮丧的是,添加主键不是一种选择。我的程序是一个较大的系统中的一个小程序,数据管理很差。我的开发时间不包括重写其他软件。

注意:数据库是Microsoft Access。

注意:类似于:Excel: TableAdapter UpdateCommand for table without primary key

更新:我说的是,“如果数据库中的表没有明确的主键,那么就没有有效的TableAdapter UpdateCommand吗?”

3 个答案:

答案 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伪列可以用作唯一的行标识符,即使没有主键也是如此