简单来说,我需要在复合运算符的情况下将空列计算为0。
我正在为定价表编写代码,在批处理中更新价格,其中更新的公式需要批准并存储在第二个表中。
这些公式是用户输入的。允许的输入是空字符串,任何数字,=(基于列的公式)和复合运算符,如+ =数字。空字符串将转换为null并存储在表中,在我们的示例中,有一个基本定价行,它将特定行中的null与基本行合并。
我的问题是当值为null时,用户输入复合操作说+ = 5我最终仍然保持列为空。除了将+=5
转换为=COALESCE(column,0)+5
之外,是否有更简单的方法来处理复合操作中表中的空值,特别是考虑到更新后表中的空值是可接受的。
commandText.AppendLine($"SELECT IIF(pc.{columnName}='',NULL,pc.{columnName}), WhereClauseContent)");
commandText.AppendLine($"FROM {schema}.PriceChange pc");
...加入</ P>
将光标移至@{columName}, @whereClause
commandText.AppendLine("SELECT @Sql = 'UPDATE pr SET");
commandText.AppendLine($"pr.{columnName}'+IIF(ISNUMERIC(@{columnName})=1 OR @{columnName} IS NULL,'=','')+@{columnName}");
commandText.AppendLine($"FROM {schema}.Pricing pr");
...加入 commandText.AppendLine( “EXEC(@SQL)”);
答案 0 :(得分:-1)
正如我在评论中提到的那样,你有解决方案。
但是,也许您根本不需要NULL
值。这可能是一件容易安排的事情:
create table x (
. . .
col int not null default 0,
. . .
)
然后,列值将为零而不是空。在这种情况下,您似乎想要零值,因此这可能是您问题的解决方案。