2010-12-02 2 views
1

У меня есть SQL ниже и хочу обновить managerNTID с помощью @managerNTID только в том случае, если запись в базе данных пользователя имеет StopManagerOverride значение 0, если оно установлено на 1 в записи, тогда я не хочу уточнить это поле:SQL Server 2005 условное обновление поля

UPDATE ee 
SET 
    MangerId  = CASE ee.ShopManagerOverride 
          WHEN 0 THEN @MangerId 
          ELSE ee.MangerId 
          END 
    ,ManagerNTID  = CASE ee.ShopManagerOverride 
          WHEN 0 THEN @managerNTID 
          ELSE ee.ManagerNTID 
          END 
    ,NTID    = @NTID 
    ,FirstName   = @FirstName 
    ,LastName   = @LastName 
    ,FullName   = @FullName 
    ,ReportingGroup  = @ReportingGroup 
    ,DistinguishedName = @DistinguishedName 
    ,IsActive   = 1 
    --,StopManagerOverride= 1 
    ,LastUpdate   = GETDATE() 
    ,UpdateBy   = @UpdateBy 
FROM dbo.Employees ee 
    Inner Join dbo.Employees e ON e.NTID = ee.NTID 
WHERE ee.NTID = @NTID 

Мысли о том, как сделать это одно поле в обновлении, имеют встроенное условие?

изменить: я почти там, просто нужно решить некоторые неоднозначные столбцы сейчас. мои глаза уже красны от этого.

ответ

0

Вы могли бы попробовать что-то вроде этого - если ShopManagerOverride установлен в 1, обновить его до значения параметров, передаваемых в противном случае обновить его до значения, которое он уже имеет (я также предполагая ваше поле действительно ManagerId - не MangerId - правый?):

UPDATE 
    dbo.Employees 
SET 
    ManagerId = @ManagerId, 
    ManagerNTID = CASE e.ShopManagerOverride 
        WHEN 1 THEN @managerNTID 
        ELSE e.ManagerNTID 
        END, 
    NTID = @NTID, 
    FirstName = @FirstName, 
    LastName = @LastName, 
    FullName = @FullName, 
    ReportingGroup = @ReportingGroup, 
    DistinguishedName = @DistinguishedName, 
    IsActive = 1, 
    LastUpdate = GETDATE(), 
    UpdateBy = @UpdateBy 
FROM 
    dbo.Employees e 
WHERE 
    e.NTID = dbo.Employees.NTID 
    AND dbo.Employees.NTID = @NTID 

Невеста, прямая и «свободная рука» из моего мозга - надеюсь, что я получил синтаксис правильно! Попробуйте - это работает, делает ли он то, что вы ищете?

0

Мне также интересно, как это сделать. Я видел заявления Case, но я не знаю, будет ли это работать в этой ситуации. Как я сделал это в прошлом, с копирования и вставки, а затем, как этот

if (conditional) 
Begin 
Update statement with field 
End 
Else 
Begin 
update statement without field 
End 

Ok Попробуйте что-то вроде этого, я не уверен, если это работает, но это дает вам направление, чтобы попытаться в

UPDATE Employees 
SET 
    MangerId   = @MangerId 
    ,ManagerNTID  = @managerNTID 
    ,NTID    = @NTID 
    ,FirstName   = @FirstName 
    ,LastName   = @LastName 
    ,FullName   = @FullName 
    ,ReportingGroup  = @ReportingGroup 
    ,DistinguishedName = @DistinguishedName 
    ,IsActive   = 1 
    ,StopManagerOverride= CASE Conditional WHEN True THEN (value to set it to) 
    ELSE (pre existing value of the row) END; 

    ,LastUpdate   = GETDATE() 
    ,UpdateBy   = @UpdateBy 
WHERE NTID = @NTID 
+0

, что собирается сделать код выглядеть некрасиво и добавить много строк ... и я просил решение в линии ... – kacalapy 2010-12-02 20:21:03

+0

im тестирование с этим сейчас ... a i на правильном пути? – kacalapy 2010-12-02 20:21:27

0

Другой способ

If StopManagerOverride = 0 
Begin 
Set @ManagerNTID = Select Existing Value of the row 
END 

ТОГДА Продолжить с нормальным обновлением заявлением