【问题标题】:sp_cursorprepare 'SELECT ........ WHERE 0 = 1' - what for?sp_cursorprepare 'SELECT ........ WHERE 0 = 1' - 为什么?
【发布时间】:2015-06-04 17:23:47
【问题描述】:

SQL Server Profiler 显示我们的 ERP 应用程序向 DB 服务器发送了很多命令,如下所示:

declare @p1 int
set @p1=NULL
declare @p5 int
set @p5=16388
declare @p6 int
set @p6=8196
exec sp_cursorprepare @p1 output,NULL,N'SELECT * FROM SomeTable WHERE 0 = 1',1,@p5 output,@p6 output
select @p1, @p5, @p6

强调:

exec sp_cursorprepare 然后SELECT (...) WHERE 0 = 1

这有意义吗?这是一种诡计吗?

【问题讨论】:

    标签: sql-server tsql sql-server-2008-r2 cursor sql-server-profiler


    【解决方案1】:

    当应用生成带有“WHERE 0=1”或“WHERE 1=1”的 SQL 语句时,它通常用作占位符,以便应用可以使用 AND 或 OR 动态构建 WHERE 子句的其余部分,而无需执行找出哪个条件是第一个并且需要立即跟随“WHERE”。

    所以,是的,这是一个让应用开发者更容易构建动态 WHERE 子句的技巧。我自己用过。

    【讨论】:

    • 你的意思是 WHERE 1=0 [OR condition1] [OR condition2] [OR condition3]。是的,这是有道理的。我必须再次查看这些查询。谢谢。
    • 是的,我就是这个意思。开发人员不知道在运行时会生成哪些额外的 OR 条件,因此他/她以 WHERE 1=0 开始 WHERE 子句,告诉 SQL “不要返回任何行,除非有额外的条件返回 true。 "
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多