私のようなものであるSQL文含むストアドプロシージャがあります。挿入時に列の値としてのアイデンティティを使用する方法
CREATE PROCEDURE SaveUser
@UserName nvarchar(10),
@FirstName nvarchar(150),
@LastName nvarchar(150)
AS
BEGIN
INSERT INTO Users (UserName, FirstName, LastName)
VALUES (@UserName, @FirstName, @LastName)
SELECT SCOPE_IDENTITY()
END
は、一部のユーザーがシステムにログインすることができないと、ユーザー名を表示できません。しかし、UserNameフィールドにはユニークなインデックスがありますので、UserNameとして自動増分フィールドであるユーザーID#を挿入できるようにしたいと考えています。
MS SQL Serverのメソッドや変数を知っている人は、私のようなことをすることができますか?
INSERT INTO Users (UserName, FirstName, LastName)
VALUES (ISNULL(@UserName, SCOPE_IDENTITY()),@FirstName,@LastName)
編集私の意図は、今、私はちょうどこれは一致するであろうことを保証することができます方法で建てられているかどうかを知りたいと思い、次の
DECLARE @NextID int
SET @NextID = IDENT_CURRENT(Users) + IDENT_INCR(Users)
INSERT INTO Users (UserName, FirstName, LastName)
VALUES (ISNULL(@UserName, @NextID), @FirstName, @LastName)
ようなものを使用することです。
このケースでは、複数のレコードの挿入を処理できるようにするために、一意のインデックスがあるためにトリガーの代わりに必要な場合があります。 – HLGEM
これは動作しますが、トリガーは実際にはデータベースを複雑にします。私は可能な限りそれらを避けるだろう。 – Andomar
は、ユーザー名に固有のインデックスがあるため機能しません。 – jellomonkey