sp_cursorprepare "选择...其中 0 = 1' - 干什么?



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

这有意义吗?这是一种把戏吗?

当应用程序生成带有"WHERE 0=1"或"WHERE 1=1"的SQL语句时,它通常被用作占位符,这样应用程序就可以使用AND或or动态构建WHERE子句的其余部分,而不必确定哪个条件是第一个,并且需要立即跟随"WHERE"。

因此,是的,这是一个让应用程序开发人员更容易构建动态WHERE子句的技巧。我自己也用过。

最新更新