SQL参数在更新语句中应该是什么时候不需要它

时间:2009-10-08 10:18:01

标签: c# sql sql-server-2005

正如问题所说,如果我不希望它更新数据库,我应该如何设置参数的值?

e.g。

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

如果在我的c#逻辑中我决定不需要更新col2,因为传入的值为null,我应该设置什么参数值以便它不更新该列?

我必须使用参数化查询,我不想编辑原始更新语句。

6 个答案:

答案 0 :(得分:4)

如果col2无法更新为NULL,请尝试使用

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

答案 1 :(得分:2)

将col2的参数设置为当前。要在C#中做出决定,你必须知道我认为它是什么,否则你必须先得到它。

这是使用像NHibernate这样的 ORM 的主要吸引力之一,它可以为您解决这些问题。

答案 2 :(得分:1)

您可以使用ANSI标准的coalesce()(ISNULL不是),但会略微更改您的更新语句,例如:

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

这会将其更新为目前的状态。

答案 3 :(得分:1)

如果您不想更新列的值,则应以某种方式将其从更新查询中删除,使用StringBuilder过滤掉条件。

或者您可以尝试查看:

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

我认为,实际上可能会从源中获取价值。因此将值设置为之前的值。您可能必须将参数的方向更改为“输入”和“输出”。

答案 4 :(得分:0)

如果您不想更新值,唯一的方法是从SQL语句中完全删除它。没有价值可以满足您的需求,您必须有不同的陈述。

唯一的选择是从DB查询当前值并再次设置此值,这至少是丑陋......

答案 5 :(得分:0)

你可以试试这个......

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

如果传递null,则不会更新列,但是它会阻止您将列设置为null,这可能是也可能没有。