2013-06-17 2 views
0

ли хранимая процедура, где я обновить мою таблицу:Обновление таблицы из хранимой процедуры

UPDATE myTbl 
SET [first_name] = @first_name, 
    [second_name] = @second_name, 
    [faculty] = @faculty, 
    [age] = @age 
    WHERE [id] = @id 

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

+0

У параметров есть значения по умолчанию «NULL», например. '@first_name как varchar (64) = NULL'? Вы вызываете процедуру без каких-либо параметров? – HABO

ответ

5
UPDATE myTbl 
SET [first_name] = IsNull(@first_name, first_name), 
    [second_name] = IsNull(@second_name, second_name), 
    [faculty] = IsNull(@faculty, faculty), 
    [age] = IsNull(@age, age), 
    WHERE [id] = @id 
+0

Благодарим вас за anwering.I вызывают процедуру, например exec myProce 'Tom', '', '', 12 во время процедуры вызова, когда я не нахожу никаких значений, которые я не хочу обновлять, он всегда обновляет себя, и таблицы снова становятся пустыми и снова – GeoVIP

+1

@GeoVIP Существует разница между NULL и пустой строкой (''). Если вы не хотите обновлять значение, вы должны выполнить exec myProce 'Tom', NULL, NULL, 12. В противном случае обновление обновится до пустой строки (''). –

3
UPDATE myTbl 
SET 
    [first_name] = ISNULL(@first_name, [first_name]) 
    , [second_name] = ISNULL(@second_name, [second_name]) 
    , [faculty] = ISNULL(@faculty, [faculty]) 
    , [age] = ISNULL(@age, [age]) 
WHERE [id] = @id 
+0

Благодарим вас за anwering.I вызывают процедуру, например exec myProce 'Tom', '', '', 12 во время процедуры вызова, когда я не нахожу никаких значений, которые я не хочу обновлять, он всегда обновляет себя, а таблицы снова становятся пустыми и снова – GeoVIP

+0

@GeoVIP - Вот оно: _wishful programming_. Вы действительно не имеете в виду '' '', и вы надеетесь, что это не заметит, но вы явно говорите ему, чтобы установить столбцы в пустые строки. Это сильно отличается от определения значений NULL по умолчанию и вызова 'exec myProce 'Tom',,, 12'. – HABO

0

Непосредственно перед запуском обновления, вы можете запустить ЗЕЬЕСТ извлечь все значения из таблицы.

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

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