0

挿入が試行されると、人の年齢が 18 歳未満の場合に子テーブルにレコードを挿入する、マーケティング リスト テーブルに配置されるトリガーを作成します。

以下のコードを参照してください。

Create Trigger on_insert_marketing_list
On marketing_list for insert
As
BEGIN
        Declare @Name varchar (100)
        Declare @Dob date
        Declare @Gender char(1)
        Declare @Parish VARCHAR(50)
        Declare @Mobile varchar(50)
        Declare @Provider varchar(50)
        Declare @age int

        Select @age = datediff(year,@dob,getdate())from inserted

        If (@age) < 18      
        BEGIN
        Insert Into Childlist values(@Name,@Dob,@Gender,@Parish,@Mobile,@Provider)
        END

End

insert into marketing_list (Name, Dob, Gender,  Parish,  Mobile, Mobile_Provider) values
('Kendrick Lamar', '3/4/2005','M','Kingston', '18764532345','LIME')
4

2 に答える 2

0

誰かの年齢を計算する関数を投稿したかっただけです:

create function [dbo].[CalculateAge] ( @p_BirthDate date, @p_ReferenceDate date )
returns int as
begin

  return DateDiff( Year, @p_BirthDate, @p_ReferenceDate ) - 
         ( Case When DateAdd( Year, DateDiff( Year, @p_BirthDate, @p_ReferenceDate ), @p_BirthDate ) > @p_ReferenceDate Then 1 Else 0 End )

end
于 2012-11-06T17:54:15.553 に答える
0

テーブルの代わりに、ChildsListこのビューではない理由:

CREATE VIEW ChildsList
AS
   SELECT
       Name,
       DOB,
        Gender,
       Parish,
       Mobile,
       Mobile_Provider
    FROM
        marketing_list
    WHERE
       DOB >= DATEADD(year,-18,CURRENT_TIMESTAMP)

これは a) 常に最新であり、b) 年齢を直接計算しようとしないため、その計算を正しく行うためにいじる必要はありません。


それでもトリガーが必要な場合は、次のようにします。

Insert Into Childlist 
select Name,Dob,Gender,Parish,Mobile,Mobile_Provider
from
    inserted where DOB >= DATEADD(year,-18,CURRENT_TIMESTAMP)

しかし、私が言うように、日付が変わるとすぐに時代遅れになります。

ChildListこれにより、次のような挿入のためにテーブルに1行が正しく挿入されます。

INSERT INTO marketing_list (Name, Dob, Gender,  Parish,  Mobile, Mobile_Provider) values
('Kendrick Lamar', '20050403','M','Kingston', '18764532345','LIME'),
('Phillip Lamar', '198550403','M','Elsewhere', '18764532346','ORANGE'),
于 2012-11-06T15:49:33.860 に答える