Каким должен быть параметр SQL в операторе обновления, когда он не требуется - PullRequest
1 голос
/ 08 октября 2009

Как следует из вопроса, как установить значение параметра, если я не хочу, чтобы он обновлял БД?

, например

UPDATE table1
SET col1 = @someval ,
    col2 = @someotherval
WHERE col3 = 1;

Если в моей логике c # я решу, что col2 не нужно обновлять, поскольку передаваемое значение равно null, что я должен установить для параметра, чтобы он не обновлял этот столбец?

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

Ответы [ 6 ]

4 голосов
/ 08 октября 2009

Если col2 не может быть обновлен до NULL, попробуйте это

update table1 
set col1 = @someval , col2 = ISNULL(@someotherval, col2)
where col3 = 1;
2 голосов
/ 08 октября 2009

Установите для параметра col2 значение , что в настоящее время . Чтобы принять решение в C #, вы должны знать, что я думаю, или тогда вам сначала нужно будет его получить.

Это одна из главных достопримечательностей использования ORM , такого как NHibernate, который решает эти проблемы для вас.

1 голос
/ 08 октября 2009

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

Или вы можете попробовать посмотреть:

public SqlParameter Add(
 string parameterName,
 SqlDbType sqlDbType,
 int size,
 string sourceColumn
);

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

1 голос
/ 08 октября 2009

Вы могли бы использовать coalesce (), который является стандартом ANSI (ISNULL нет), но немного изменил бы ваш оператор обновления, например ::

update table1 
   set col1 = coalesce(@someval, col1),
       col2 = @someotherval
 where col3 = 1;

Это обновит его до того, что есть в настоящее время.

0 голосов
/ 08 октября 2009

Вы можете попробовать это ...

UPDATE  table1 
SET     col1 = @someval, 
        col2 = ISNULL(@someotherval, col2)
WHERE   col3 = 1;

Это не будет обновлять столбец, если вы передадите пустое значение, однако оно не позволит вам установить для столбца значение null, которое может или не может быть в порядке.

0 голосов
/ 08 октября 2009

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

Единственной альтернативой этому является запрос текущего значения из БД и установка этого значения еще раз, что, по крайней мере, некрасиво ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...