在我的 asp.net 项目中,在某些情况下,C# 中的服务器端筛选器函数正在构建 SQL WHERE
子句,然后将其传递到 SQL 存储过程中,例如,
过滤器生成一个字符串变量,其值类似于" WHERE Qty < 5 AND Price > 10
"。
存储过程的相关部分如下所示:
Exec (‘
Select Name, Location
From Users
+ ‘@passedInWhereClause’
‘)
如您所见,我们必须对使用传递的变量构建的字符串执行EXEC
命令,该变量包含由服务器端的 C# 代码生成的 where
子句。我真的很想要一种方法来消除EXEC
并使SQL代码看起来更专业,而不是用EXEC
包裹的巨大字符串。有没有更好的方法可以做到这一点?
您应该考虑可选参数,示例
WHERE (@Type = NULL OR @Type = '' OR @Type = Type)
这允许您将 NULL 或空白传递给 SP 以忽略 where 子句,或者传递值以应用 where 子句。
不,没有更好的方法可以做到这一点,因为您正在构建要执行的动态 SQL。
如果你想做得更好,那就不要运行动态SQL。
动态SQL的诅咒与祝福