如果Colid +多个其他列都是唯一的,则Sql Insert into table

时间:2015-02-23 18:57:10

标签: sql sql-server

我有以下表格设置

广告活动: CampaignID PK CAMPAIGNNAME

CampaignActions: CampaignActionID PK CampaignActionName

CampaignActionSubmissions: CampaignActionSubmissionID PK 用户身份 电子邮件地址 的CampaignID CampaignActionID IP地址 时间戳 UserAddress

我正在尝试仅在CampaignActionID + IPaddress和/或CampaignActionID + UserID不存在和/或CampaignActionID + EmailAddress时插入记录。

换句话说: 如果CampaignActionID +三者中的任何一个(UserID,IPAddress,EmailAddress)存在,则不要插入。

这个想法是不让人们登录,但仍然阻止他们多次完成相同的操作。 UserID存储在cookie中。 所以UserID 1用UserID A,IPAddress B,EmaiAddress C完成CampaignactionID 1 如果userID 1删除了cookie,要获得新的UserId,他的Ipaddress仍然匹配,请不要插入 如果用户ID 1使用新计算机,他的电子邮件地址仍然匹配,请勿插入。 userID是否更改IPAddress,他的UserID仍然匹配,不插入。

1 个答案:

答案 0 :(得分:1)

我只是猜测类型,但这里有一些psydo代码:

 create procedure doInsert
         @camppaignActionID int,
         @ipaddress varchar(50),
         @userid varchar(50),
         @emailaddress varchar(50),
         @CampaignID int,
         @userAddress varchar(50)
    as

    if ( not exists (select 1 from CampaignActionSubmissions where camppaignActionID  = @camppaignActionID  and ipaddress = @ipAddress ) 
        and 
        not exists (select 1 from CampaignActionSubmissions where camppaignActionID  = @camppaignActionID  and userid= @userid) 
        and 
        not exists (select 1 from CampaignActionSubmissions where camppaignActionID  = @camppaignActionID  and emailaddress = @emailaddress )  ) 
    begin
         insert into CampaignActionSubmissions (  EmailAddress, CampaignID, CampaignActionID, IPaddress, Timestamp, UserAddress )
  values ( @emailaddress, @campaignID, @campaignActionId, @ipaddress, getdate(), @userAddress)
    end