在Where语句中使用两个不同的列,具体取决于是否为空

时间:2017-02-06 21:28:40

标签: c# sql oracle

我目前在SQL字符串中有一个WHERE子句,如下所示:

CmdTxt = CmdTxt + "Where FA.CSE_LAN = '" + UID + "' ";

最终以对Oracle的调用结束:

OracleCommand cmd = new OracleCommand(CmdTxt, connection);
cmd.Connection = connection;

cmd.CommandText = CmdTxt;
cmd.CommandType = CommandType.Text;
OracleDataAdapter da = new OracleDataAdapter(cmd);

da.Fill(dt);

我现在需要做的是更改WHERE逻辑,以便它首先查看名为FA.BUILD_CSE_LAN的列。如果它有值,它将在WHERE子句中使用该列。

如果它没有值,它将使用FA.CSE_LAN子句中的WHERE列。

我该怎么做?我在ASP.Net环境中对Oracle 12c数据库使用C#代码隐藏,如果有任何重要的话。

2 个答案:

答案 0 :(得分:2)

这篇关于Oracle的文档可能有所帮助:NVLCOALESCE可以提供帮助。

CmdTxt = CmdTxt + "Where NVL(FA.BUILD_CSE_LAN, FA.CSE_LAN) = '" + UID + "' ";

CmdTxt = CmdTxt + "Where COALESCE(FA.BUILD_CSE_LAN, FA.CSE_LAN) = '" + UID + "' ";

答案 1 :(得分:1)

我不是oracle的专家,但我会尝试这样的事情。

CmdTxt = CmdTxt + "Where FA.BUILD_CSE_LAN = @UID  OR ( FA.BUILD_CSE_LAN IS NULL AND FA.CSE_LAN = @UID)";

这样,如果你的构建字段为null,没有值,它会检查另一个。 并声明@UID作为命令的参数,以避免注入或特殊字符问题。