2012-03-21 4 views
1

SQL Server Management Studio 2008 R2(10.50.2500.0)を使用して約50列のテーブルの値を編集しようとしています。列の一つは、電子メールのための通常の標準テキスト列(制約なし、ノーFKS、何もない)である:SQL Server Management Studio 2008 R2で奇妙なメッセージが表示されたら、nvarcharフィールドを変更するとエラーが発生する

CREATE TABLE [dbo].[Members](
    [Id] [uniqueidentifier] NOT NULL, 
      .... 
    [Email] [nvarchar](250) NOT NULL, 
      .... 

私は、テーブルの上に右クリックし、「編集トップ200行」をクリックし、行を選択しないと、 「aaa」から「bbb」に電子メールを更新します。

のMicrosoft SQL Server Management Studioを

んが、行が更新されなかった:私は行を残すためにしようとすると、私は、このエラーメッセージが表示されます。

行2のデータはコミットされませんでした。エラーソース:mscorlib。エラー メッセージ:オフセットと長さが配列または数の範囲外です。 は、インデックスから ソースコレクションの最後までの要素の数よりも大きいです。

エラーを修正して再試行するか、ESCキーを押して変更を取り消します。

OKヘルプ私はSQLスクリプトを使用して値を更新した場合、それだけで正常に動作

UPDATE [dbo].[Members] SET [Email] = 'bbb' WHERE Email = 'aaa' 

ここで何が起こっているすべてのアイデア?ありがとう!

+0

テーブルのトリガー? –

+0

テーブルにプライマリキーが設定されていますか? – RThomas

+0

@Jānis - トリガーなし – avs099

答えて

2

「編集」機能を確実に使用するには、テーブルに主キーを定義する必要があります。

"update where"には、where句に一致するすべての行が1つまたは複数存在するクエリがあります。ただし、編集ツールを使用すると、更新は1つの行だけにする必要がありますが、不足しているPKは安全に把握できません。

私の経験から、PKなしで編集ツールを安全に使うことができるのは、すべての行が明らかに重要である(本質的に)行全体がPKであるということです。

+0

PLUSとにかくGUIを通してレコードを編集することは本当に悪い考えです。データへの変更をスクリプト化してソース管理に入れ、他の環境に容易に移植できるようにする必要があります。 – HLGEM

+0

@RThomas - 私の悪い、私は私がPKを言ったときに提供したコードを見ていた - と何らかの理由で私はPKがテーブルが作成された後に定義されていることを忘れてしまった。もちろん、主キーがあります。これはID列です。 – avs099

+0

@HLGEM - 聞いていますが、ライブデータベースで一度だけ修正する必要がありました。 – avs099

関連する問題