我有一个数据库数据库,其中包含表名,但没有主键。意味着它可以有重复的数据。例如:我有5个家庭(f1,f2,f3,f4,f5),里面有不同的成员(成员可能有相同的名字)。所以我可以在超过1行中拥有完全相同类型的记录。现在我只想编辑该系列的1个成员,但它正在编辑所有重复记录。我想要做的是,我只想一次更新我的数据库一次。换句话说,我想使用UPDATE命令执行一次。怎么做? 我正在使用Sql Server Express,VS2010,C#4.0(如果此信息很重要)。 我很确定我的问题对某些人来说可能听起来很愚蠢(可能很多)。但这只是我的问题的假设。任何帮助或建议将不胜感激。感谢
答案 0 :(得分:2)
我知道这并不是你所要求的,但严重的是,最简单的选择是改变数据库以获得主键并使用它。也许是一个身份证......
如果没有它,您只能更新一条记录,但 您无法保证哪条记录 。这就是为什么主键是基本概念的原因。我认为如果它们完全相同则无关紧要,所以......
如果确实想要在没有主键的情况下继续操作,则需要使用TOP关键字,如下所示:How do I update n rows in a table?
将其设为
UPDATE TOP 1 ....
答案 1 :(得分:1)
添加标识列,ID为int,自动增量为on。然后使用id更新。
CREATE TABLE dbo.Family
(
Id int NOT NULL IDENTITY (1, 1),
FamilyName varchar(50) NULL
)
update dbo.Family set FamilyName = 'xxx' where Id = y
答案 2 :(得分:1)
如果由于某种原因无法添加标识列:
UPDATE TOP ( 1 ) Families
SET Whatever = 'Your Value', ...
WHERE <Your where clause>
答案 3 :(得分:0)
真正的答案是:修复您的数据库设计。每条记录都应该有一些唯一标识符。添加自动增量字段等。
要直接回答您的问题,您可以说“更新top(1)...”仅更新一条记录。但是如果没有一些唯一标识符,您如何知道要更新哪条记录?该程序将基本上更新随机记录。这让我回到了第1点。
编辑:糟糕,我的原始答案是针对不同的引擎。在上面更正。