sp_cursorprepare' SELECT ........ WHERE 0 = 1' - 做什么的?

时间:2015-03-31 11:23:11

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

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

它有意义吗?这是一种伎俩吗?

1 个答案:

答案 0 :(得分:2)

当应用程序使用&#34生成SQL语句时; WHERE 0 = 1"或" WHERE 1 = 1",它通常用作占位符,以便应用程序可以使用AND或OR动态构建WHERE子句的其余部分,而无需确定哪个条件是第一个和需要立即遵循" WHERE"。

所以是的,这对于为应用程序开发人员构建动态WHERE子句更加容易。我自己用过它。