TSQL:在WHERE子句中使用CASE?

时间:2016-11-01 17:12:37

标签: c# tsql

t-sql 中编写 c#代码是否有效?

string sqlText = "SELECT col1, col2, col3 "
               + "FROM table "
               + "WHERE col1 = @val1 ";

if(condition) // i.e. if type == 'salary'
{
  sqlText += " AND col2 = @val2";
}

sqlText += " ORDER BY col1";

我做了什么,它的工作方式是用if/being/end来完成整个陈述。

IF(@empType = 'salary')
  BEGIN
     //query statement here...
  END
 ELSE 
  BEGIN
   //same query statement here with the extra logic that C# code adds...
  END

该查询用于在HTML页面上显示数据。现在,已经决定将页面转换为SSRS报告。

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

这样的东西
SELECT col1, col2, col3
FROM table 
WHERE col1 = @val1
  AND (@empType <> 'salary' 
     OR (@empType = 'salary' AND col2 = @val2))
ORDER BY col1

但我不确定empType是什么,如果它是一个参数或其他东西。

动态构建SQL是不好的,原因有几个(SQL服务器无法可靠地优化,更多地暴露于潜在的SqlInjection),但是像上面这样的竞争条件模式会起作用。

考虑单独的存储过程并通过代码调用正确的过程而不是这种混乱。