正如问题所说,如果我不希望它更新数据库,我应该如何设置参数的值?
e.g。
UPDATE table1
SET col1 = @someval ,
col2 = @someotherval
WHERE col3 = 1;
如果在我的c#逻辑中我决定不需要更新col2,因为传入的值为null,我应该设置什么参数值以便它不更新该列?
我必须使用参数化查询,我不想编辑原始更新语句。
答案 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,这可能是也可能没有。