0

SQL Server事件探查表明,我們的ERP應用程序發送了很多命令DB服務器看起來像:sp_cursorprepare'SELECT ........ WHERE 0 = 1' - 爲了什麼?

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

這有什麼意義嗎?這是一種詭計嗎?

回答

2

當應用程序生成「WHERE 0 = 1」或「WHERE 1 = 1」的SQL語句時,它通常用作佔位符,以便應用程序可以使用AND或OR動態構建WHERE子句的其餘部分,找出哪個條件是第一個,需要立即跟隨「WHERE」。

所以是的,這是一個讓應用開發者更容易構建動態WHERE子句的技巧。我自己使用它。

+0

你的意思是WHERE 1 = 0 [OR condition1] [OR condition2] [OR condition3]。是的,這是有道理的。我必須再次查看這些查詢。謝謝。 – huhu78 2015-03-31 19:39:20

+1

是的,這就是我的意思。開發人員不知道在運行時會生成哪些額外的OR條件,因此他/她使用WHERE 1 = 0啓動WHERE子句,告訴SQL「除非有附加條件返回true,否則不要返回任何行。 「 – 2015-03-31 19:41:45

相關問題