2014-01-07 3 views
0

У меня есть update заявления, которое выглядит следующим образом:переменной TSQL Update, если имеется значение

UPDATE sessions 
SET currentStep  = @currentStep, 
    chosenDepartment = @chosenDepartment, 
    proposedTimes = @proposedTimes 
WHERE sessionID = @sessionID 
    AND empID = @empID; 

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

Мой вопрос: есть ли способ сделать это только:

chosenDepartment = @chosenDepartment 

@cosenDepartment, если на самом деле содержит значение?

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

ответ

0

Вы можете положить if заявление перед tsql, так что если @chosenDepartment пуст, то tsql не будет запущен.

+0

Он не будет запускать запрос вообще или только это значение? – SBB

+0

Он не будет запускать запрос вообще, когда ваш параметр пуст. Это то, что вы хотите, не так ли? – vasin1987

+0

Я не хочу, чтобы он запускал пустое значение. Если я не передаю что-либо в/@ selectedDepartment, тогда выбраноDepartment = @chosenDepartment, не будет вставлять ничего, кроме остальной части переданных значений будет вставляться как обычно – SBB

2

Попробуйте это:

UPDATE sessions 
SET currentStep  = @currentStep, 
    chosenDepartment = CASE WHEN @chosenDepartment IS NOT NULL THEN @chosenDepartment ELSE chosenDepartment END, 
    proposedTimes = @proposedTimes 
WHERE sessionID = @sessionID 
    AND empID = @empID; 

или это

UPDATE sessions 
SET currentStep  = @currentStep, 
    chosenDepartment = COALESCE(@chosenDepartment, chosenDepartment), 
    proposedTimes = @proposedTimes 
WHERE sessionID = @sessionID 
    AND empID = @empID; 

Примечание # 1: SQL Server переведет COALESCE(@chosenDepartment, chosenDepartment) в CASE WHEN @chosenDepartment IS NOT NULL THEN @chosenDepartment ELSE chosenDepartment END.

Примечание # 2: Если вы хотите, чтобы избежать NULL @chosenDepartment, но если вы хотите избежать обновления с пустыми строками или 0, то вы могли бы использовать NULLIF функцию таким образом: COALESCE(NULLIF(@chosenDepartment,''), chosenDepartment) или COALESCE(NULLIF(@chosenDepartment,0), chosenDepartment).

Смежные вопросы