2011-09-27 195 views
0

我有一個帶有表名填充但沒有主鍵的數據庫DB。意味着它可以有重複的數據。例如:我有5個家庭(f1,f2,f3,f4,f5),裏面有不同的成員(成員可能有相同的名字)。所以我可以在1行以上具有完全相同類型的記錄。現在我想編輯該家族的一名成員,但它正在編輯所有重複記錄。我想要做的是,我只想一次更新我的數據庫一次。換句話說,我想用UPDATE命令執行一次。怎麼做? 我正在使用Sql Server Express,VS2010,C#4.0(如果此信息很重要)。 我很確定我的問題聽起來可能對某些人來說很愚蠢(可能很多)。但這只是我的問題。任何幫助或建議將不勝感激。謝謝只執行一次Sql命令一次

+2

如果名稱重複且沒有主鍵,那麼將如何識別要更新的「一個」行? –

+0

hmmm,通過檢查不同的列名稱,無論遇到多少行匹配,它都必須更新一個並退出。但對你的查詢,一個upvote – Sandy

+0

你仍然必須回答*哪個*行更新的問題。 –

回答

2

我知道這不正是你問什麼,但嚴重的是,最簡單的方法是改變數據庫有一個主鍵並使用它。其中記錄也許是身份的關鍵....

不這樣做,你可以只更新一個記錄,但你有沒有保證。這就是爲什麼主鍵如基本概念。我想這並不重要,如果他們都是一樣的,所以....

如果你真的沒有主鍵進行操作,則需要使用TOP關鍵字如下所示:How do I update n rows in a table?

將其設置爲

UPDATE TOP 1 .... 
+0

謝謝...它的工作 – Sandy

1

添加一個標識列,ID int與自動增量上。然後使用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 
+0

肯定會考慮添加一個標識列 – Sandy

1

如果你因爲某些原因,添加標識列:

UPDATE TOP (1) Families 
SET Whatever = 'Your Value', ... 
WHERE <Your where clause> 
+0

你如何保證這會更新正確的行? –

+0

定義「正確」。如果行都完全相同,則想法是更改它們中的任何一個。如果行不相同,不要這樣做 - 使用WHERE子句獲取正確的行。 – Andrew

+1

但是更新隨機記錄要比找到正確的記錄容易得多!就像我一直說的那樣,瘋狂推測比實際做研究和找到正確答案要容易得多。 – Jay

0

真正的答案是:修復你的數據庫設計。每個記錄應該有一些唯一的標識符。添加一個自動增量字段或其他東西。

要直接回答你的問題,你可以說「update top(1)...」只更新一條記錄。但是沒有一些獨特的標識符,你怎麼知道要更新哪個記錄?該方案將基本上更新一個隨機記錄。這需要我回到第1點。

編輯:哎呀,我原來的答案是針對不同的引擎。以上更正。

+0

我一定會檢查我的數據庫設計,並會考慮添加一個id列。謝謝你的幫助 – Sandy