質問

したユーザテーブル、ユーザーにユニークなメールユーザ名です。が行われているか体感してみてはこの内のコードがしたいと思っていユーザーが挿入されない(または更新)データベースに登録した同一usernameを持の送いたします。私を追加 BEFORE INSERT トリガを防止する挿入の複製します。

CREATE TRIGGER [dbo].[BeforeUpdateUser]
   ON  [dbo].[Users]
   INSTEAD OF INSERT
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    DECLARE @Email nvarchar(MAX)
    DECLARE @UserName nvarchar(MAX)
    DECLARE @UserId int
    DECLARE @DoInsert bit

    SET @DoInsert = 1

    SELECT @Email = Email, @UserName = UserName FROM INSERTED

    SELECT @UserId = UserId FROM Users WHERE Email = @Email

    IF (@UserId IS NOT NULL)
        BEGIN
            SET @DoInsert = 0
        END

    SELECT @UserId = UserId FROM Users WHERE UserName = @UserName

    IF (@UserId IS NOT NULL)
        BEGIN
            SET @DoInsert = 0
        END

    IF (@DoInsert = 1)
        BEGIN
            INSERT INTO Users
            SELECT 
                           FirstName, 
                           LastName, 
                           Email, 
                           Password, 
                           UserName, 
                           LanguageId,
                           Data, 
                           IsDeleted 
                       FROM INSERTED
        END
    ELSE
        BEGIN
            DECLARE @ErrorMessage nvarchar(MAX)
            SET @ErrorMessage = 
                         'The username and emailadress of a user must be unique!'
            RAISERROR 50001 @ErrorMessage
        END 
END

もの更新のトリガから評価を頂きましたかではないかと思います。がその場で発音を確認することがこの例です:http://www.devarticles.com/c/a/SQL-Server/Using-Triggers-In-MS-SQL-Server/2/ がわからない該当する場合は更新する際に複数の列です。

編集:

またの追加を独自の制約これらのカラムが動作していません:

Msg 1919, Level 16, State 1, Line 1
Column 'Email' in table 'Users' is of a type 
that is invalid for use as a key column in an index.
役に立ちましたか?

解決

を追加できる独自のcontraint、これを誤っている場合、挿入や更新を重複

ALTER TABLE [Users] ADD  CONSTRAINT [IX_UniqueUserEmail] UNIQUE NONCLUSTERED 
(
    [Email] ASC
)

ALTER TABLE [Users] ADD  CONSTRAINT [IX_UniqueUserName] UNIQUE NONCLUSTERED 
(
    [UserName] ASC
)

編集:Ok、私は読コメントもポストやこだNVARCHAR(MAX)としてデータ型になります。ある理由が4000以上の文字メールアドレスまたはユーザー名?ここでの問題があると考えています。を小さくすればするNVARCHAR(250)または黒字にを利用することができ独自の指数です。

他のヒント

当社はその双方をあわせ持っていくのではなスを作成します。理由がありまんがの指数路線?

なぜならず利用の属性をカラムデータベース?設定のSQLサーバーを実施するように誤っている場合を挿入する惑わ.

のものを使用できるSQL文 UNIQUE 制約がそれぞれのカラムです。

を作成でき UNIQUE INDEXNVARCHAR 次も可能ですので、その点も便利で NVARCHAR(450) 以下に抑えます。

なおす UNIQUE カラムするので大きいの?

一般的に、私のようなトリガを可能な限りなどをすることがでの行動を非常に難解なることをご存知のトリガーが存在します。その他のcommentatatorsっているため、独自の制約の道のり(ば修正列の定義を許可します。

まんのを使用する必要がトリガーでこのようなデザインが不十分なものである。さんなぜ必要かどうかは論理に所属している。

それをご利用の場合は、独自の制約/index溶液にSQLサーバーを一つだけの場合はnull値が許可されるカラムです。そのため、たとえば、含まれておりませんが、メールアドレスオプションするのではなく、かつユーザーがnullの場合メールアドレスです。その場合、ならばリゾートには別のアプローチのようにトリガは濾過した。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top