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会有所帮助。我知道它将是语法或它的结构。
答案 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仅在电子邮件不为空时设置为电子邮件的内容