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

问题描述:

没有主键的表的Update查询的语法是什么?对于没有主键的表,MS-Access:TableAdapter UpdateCommand

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

注意:数据库是Microsoft Access。

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

UPDATE:“如果在数据库中的表没有明确的主键,那么就不可能有有效的TableAdapter的UpdateCommand”我是在说,纠正

如果没有明确的主键,至少应该有一个隐式主键(即使它是每列)。如果没有任何密钥,您将无法安全地更新表格。

如果在创建数据集时,经过向导,你应该得到一个更新查询,包括类似于这样的更新语句:

 
update TableA 
set Column1 = @Column1, Column2 = @Column2 ... 
where Column1 = @PreviousColumn1 and Column2 = @PreviousColumn2 ... 

编辑
您将无法使用在表上没有PK的更新或删除命令的向导。但是,您可以将Access文件的副本放在表上(如果您无法派生一个简短的隐式键,您可能需要使用每列)并使用它来通过向导创建命令。

如果您不想经历该步骤,那么您将不得不创建类似于上面的查询。参数@PreviousColumnXSourceVersion值将设置为Original

update TableA 
set Column1 = @Column1, Column2 = @Column2 ... 
where (Column1 = @PreviousColumn1 or @PreviousColumn1 is null) 
    and Column2 = @PreviousColumn2 ... 
+0

我想你不会为你生成一个主键(并且可能如果你有连接子句你没有得到一个主键......)我记得有关... 有一阵子了)。你必须手动创建一个,是的。 – 2010-03-15 19:57:57

+1

根据这篇文章:http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/4b5b3007-7a6e-4372-ae34-578d0b33725a添加一个主键也必须在数据库中完成。 – 2010-03-15 20:02:19

+0

我正确地说:“如果数据库中的表没有明确的主键,那么可能没有有效的TableAdapter UpdateCommand?” – Steven 2010-03-16 13:45:40

这与如果您有主键没有什么不同。但是,您将不得不设置某种where子句,这将允许您唯一标识一行。

+3

是的,但如果受影响的不匹配,预计什么(即,如果从数据表更新一个行,多行的条件相匹配)的行数 – 2010-03-15 19:30:07

+0

是TableAdapter的将失败有一种方法可以简单地将DataTable的内容替换为内存中的内容(在DataSet中)?该表只有50行左右。 – Steven 2010-03-15 19:32:12

+0

@Steven:不,你必须使用UPDATE语句。 – 2010-03-15 19:53:38

您正在使用哪些DBMS?在Oracle(也可能是其他人,但我对Oracle有更多的经验)中,有一个ROWID伪列,可以用作唯一行标识符,即使没有主键也可以使用

+0

微软Access(我刚刚编辑的主要帖子) – Steven 2010-03-15 19:30:34