2011-09-27 9 views
0

データベース名には表名が含まれていますが、主キーはありません。データの複製が可能であることを意味します。例:私は5つのファミリー(f1、f2、f3、f4、f5)を持っています。だから私は1行以上で全く同じタイプのレコードを持つことができます。今は家族のメンバー1人だけを編集したいのですが、すべての重複レコードを編集しています。私がしたいのは、データベースを1回だけ更新することです。言い換えれば、UPDATEコマンドを使用して一度だけ実行したいのです。どうやってするの? 私はSql Server Express、VS2010、C#4.0(この情報が重要な場合)を使用しています。 私の問題は(おそらく多くの)いくつかの人々に愚かに聞こえるかもしれないと確信しています。しかし、それは私の問題のダミーです。どんな助けや提案も大歓迎です。ありがとうSqlコマンドを1回だけ実行する

+2

名前が重複していてプライマリキーがない場合、更新したい "1"の行を特定するにはどうすればよいでしょうか? –

+0

hmmm、異なる列名をチェックすることで、マッチした行数にかかわらず、1つだけ更新して終了する必要があります。あなたの質問には、1つupvote – Sandy

+0

あなたはまだ更新する*どの*行の質問に答える必要があります。 –

答えて

2

私はそれはあなたが求めているものを正確ではないのですが、真剣に、最も簡単なオプションはにデータベースを変更することである知っています主キーを持ち、それを使用します。おそらく、アイデンティティキーが....それがなければ

、あなただけのレコードが、あなたはどのレコードの保証はありませんを更新することができます。これが基本的な概念のような主キーである理由です。私は、彼らがしている場合、これは本当に重要ではありませんと仮定し、すべてのあなたが本当に主キーなしで続行したい場合は、ここで示されているのと同じなので....

は、あなたはTOPキーワードを使用する必要があります。How do I update n rows in a table?

UPDATE TOP 1 .... 
+0

ありがとうございました – Sandy

1

アイデンティティ列にIDを追加し、自動インクリメントをオンにします。その後、IDを使用して更新します。あなたには、いくつかの理由で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

確実にID列を追加することを検討します – Sandy

1

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

そして、この更新が正しい行にどのように保証されますか? –

+0

「正しい」を定義します。行がすべて同じ場合は、いずれか1つを変更することが考えられます。行が同一でない場合は、このようにしないでください。正しい行を取得するWHERE句を使用してください。 – Andrew

+1

しかし、ランダムなレコードを更新することは、正しいレコードを見つけることよりもずっと簡単です!私がいつも言っているように、実際に調査して正しい答えを見つけるよりも、それほど難しいと思う方がずっと簡単です。 – Jay

0

にそれを設定して本当の答えは:データベース設計を修正。すべてのレコードには固有の識別子が必要です。自動増分フィールドなどを追加します。

質問に直接答えるには、「トップ(1)を更新...」と言って1つのレコードのみを更新してください。しかし、独自の識別子がなければ、更新するレコードをどのように知っていますか?プログラムは基本的にランダムなレコードを更新します。どちらが私をポイント1に戻してくれるのですか。

編集:私の元々の答えは、別のエンジンのものでした。上記を訂正。

+0

私は間違いなく私のデータベース設計を見直し、ID列の追加を検討します。ご協力いただきありがとうございます – Sandy

関連する問題