在IF语句SQL Beginner中苦苦挣扎

时间:2016-10-14 15:10:38

标签: tsql

UPDATE dbo.Contact
SET emailMessenger = '63' WHERE personID = @personID
WHILE (SELECT Email FROM Contact WHERE personID = @personID) != @email
BEGIN
    IF (SELECT Email FROM Contact WHERE personID = @personID) IS NULL
        UPDATE Contact SET Email = @personID WHERE personID = @personID
    ELSE IF (SELECT Email FROM Contact WHERE personID = @personID) IS NOT NULL
        UPDATE Contact SET SecondaryEmail = email WHERE personID = @personID
        UPDATE Contact SET email = @email WHERE personID = @personID
END

我要做的是向primaryemail添加员工工作电子邮件。但如果他们已经有个人电子邮件,那么我想先将其移至secondaryemail。但仅限于指定的员工,因此也是PersonID。

我使用CASE和IF-THEN查看了很多不同的例子。我想我在声明中添加了太多内容。我真的认为这个Stackoverflow queston会有所帮助。我知道它将是语法或它的结构。

2 个答案:

答案 0 :(得分:0)

你可以使用更新代码触发器吗

UPDATE dbo.Contact
SET emailMessenger =  '63',  
    dbo.Contact, 
    SecondaryEmail = CASE when Email is not null then Email else    SecondaryEmail end ,
       Email = CASE when email is null  then 'studentemail.com'
           when email <>'studentemail.com' then 'studentemail.com' else     email end
where personID = '18403';

答案 1 :(得分:0)

如果我正确地遵循你的逻辑,以下应该可以解决问题。

我首先设置了一个包含所有可能的问题排列的测试表(电子邮件存在于一个,两个或两个列中)。如果您的数据看起来不像这样,我的解决方案可能不适用。

drop table Contact

CREATE TABLE Contact
 (
   PersonId        int           not null
  ,Email           varchar(100)  null
  ,SecondaryEmail  varchar(100)  null
 )

INSERT Contact values
  (1, null, null)
 ,(2, 'OnlyFirst', null)
 ,(3, null, 'OnlySecond')
 ,(4, 'FirstEmail', 'SecondEmail')

以下设置要进行的更改,显示内容,进行更改,然后显示内容。

DECLARE
  @PersonId  int
 ,@Email     varchar(100) = 'NewEmail@foo.com'

SET @PersonId = 4

--  Before
SELECT * from Contact

--  Modify
UPDATE Contact
 set
   Email          = @Email
  ,SecondaryEmail = case when Email is not null then Email else SecondaryEmail end
 where PersonID = @PersonID

--  After
SELECT * from Contact

净结果:@Email始终设置在电子邮件列中,并且@SecondaryEmail仅在电子邮件不为空时设置为电子邮件的内容