私の Web サイトでは、ユーザーが自分の電子メール アドレスを更新できるようにしています。ただし、各メール アドレスは一意である必要があります。データベースで更新する前に、更新フォームに入力された電子メール アドレスが一意であることを確認するにはどうすればよいですか?
3 に答える
1
メール アドレスを格納する列に一意の制約を設定します。
UNIQUE 制約を使用して、主キーに含まれていない特定の列に重複する値が入力されないようにすることができます。
一意の制約を持つテーブルに盲目的に挿入すると、例外がスローされます。これを回避するには、where 句でこの電子メール アドレスをチェックする選択クエリを実行します。
ユーザーベースが大きい場合は、必ずメール列にインデックスを付けてください。
于 2012-08-17T03:34:53.423 に答える
0
テーブルにいくつかのキーがあり、最初のステートメントは次のとおりであると仮定します。
UPDATE dbo.foo SET Email = @Email WHERE Key = @key;
次に、最初に値を確認できます。
IF EXISTS (SELECT 1 FROM dbo.foo WHERE Email = @Email AND Key <> @Key)
BEGIN
RAISERROR('Sorry, that e-mail is already in use.', 11, 1);
END
ELSE
BEGIN
UPDATE dbo.foo SET Email = @Email WHERE Key = @key;
END
今、あなたはとにかくテーブルに制約があるはずです、例えば
ALTER TABLE dbo.foo ADD CONSTRAINT UQ_Email
UNIQUE(Email);
ただし、ここで示したように、制約が設定されている場合でも、最初に違反をチェックすることは依然として有益です。
于 2012-08-17T03:45:01.767 に答える
-1
私の最初の推奨事項は、これをテーブル内の一意の列として定義することです。これを参照してください。または、私の意見では、これを行うための非常に良い方法ではありません (ただし、何らかの理由でテーブルを制御していない可能性があります)。insert ステートメントでこれを確認できます。詳細情報 (テーブル構造 / 挿入ステートメント) を提供していただければ、より適切な回答を提供できます。
于 2012-08-17T03:31:45.967 に答える