2

カスタムPKなのでトリガー経由でPKを生成したい。

メンバータイプフィールドに応じて、PKであるメンバーIDを生成したいようなものです。

たとえば、新しいレコードのメンバー タイプが DGIA の場合、メンバー ID は DGIA1、DGIA2、DGIA3 などになります。メンバー タイプが DGIL の場合、メンバー ID は DGIL1、DGIL2、DGIL3 などになります。 ...

それで、同じトリガーを書く方法...次のように試しましたが、1番目のレコードでのみ機能しています。

ALTER TRIGGER [dbo].[next_member_id] ON  [dbo].[DAD_MEMBERSHIP] AFTER INSERT
AS 
BEGIN

DECLARE @COUNT INT
SET @COUNT=0;

SELECT @COUNT=ISNULL(MAX(CAST(SUBSTRING(DAD_MEMBERSHIP.MEMBER_ID,5,15) AS INT)),0)+1 FROM DAD_MEMBERSHIP where DAD_MEMBERSHIP.MEMBER_TYPE = DAD_MEMBERSHIP.MEMBER_TYPE

update DAD_MEMBERSHIP set DAD_MEMBERSHIP.MEMBER_ID = DAD_MEMBERSHIP.MEMBER_TYPE + CONVERT(varchar,@COUNT)
from DAD_MEMBERSHIP inner join inserted on DAD_MEMBERSHIP.MEMBER_TYPE = inserted.MEMBER_TYPE

END
4

2 に答える 2

0

次のトリガーを使用して問題を解決しました

ALTER TRIGGER [dbo].[next_member_id] 
   ON  [dbo].[DAD_MEMBERSHIP] 
   AFTER INSERT
AS 
BEGIN

DECLARE @COUNT INT
SET @COUNT=0;

DECLARE @STR VARCHAR(5)
SET @STR=''

select @STR=i.MEMBER_TYPE from inserted i;  

SELECT @COUNT=ISNULL(MAX(CAST(SUBSTRING(DAD_MEMBERSHIP.MEMBER_ID,5,15) AS INT)),0)+1 
from DAD_MEMBERSHIP where MEMBER_TYPE=@STR

update DAD_MEMBERSHIP set DAD_MEMBERSHIP.MEMBER_ID = @STR + CONVERT(varchar,@COUNT)
from DAD_MEMBERSHIP inner join inserted i on i.MEMBER_TYPE=DAD_MEMBERSHIP.MEMBER_TYPE where DAD_MEMBERSHIP.MEMBER_ID is null



END
于 2012-05-22T08:53:58.453 に答える
0

トリガーはレコードのバッチで動作します。スカラー変数に割り当てて、複数のレコードで機能することを期待することはできません。プロセス全体をセットベースのプロセスに再考する必要があります。

于 2012-05-17T13:58:15.773 に答える