我有以下兩個SQL語句「IF..ElseIf..Else」 或 「Where子句」 引導存儲過程結果
第一招:
IF(@User_Id IS NULL)
BEGIN
SELECT *
FROM [UserTable]
END
ELSE
BEGIN
SELECT *
FROM [UserTable] AS u
WHERE u.[Id] = @User_Id
END
第二個:
SELECT *
FROM [UserTable] AS u
WHERE (@User_Id IS NULL OR u.[Id] = @User_Id)
這兩個查詢都會被封裝在自己的存儲過程中。我懷疑IF語句在SQL上導致了很多重新編譯。我面臨要麼將IF語句的每個部分分離到它自己的存儲過程,要麼用WHERE子句替換整個IF語句(在第二個SQL語句中說明)
我的問題是:有什麼區別從性能角度來看這兩個語句,以及SQL如何處理每條語句?
謝謝。
如果您使用的是SQL Server 2005+,那麼爲什麼不看執行計劃以查看其差別呢? – 2010-11-04 09:55:38
另外,如果您的ELSE語句中的@User_Id IS NOT NULL不需要重新測試,因爲您知道它不是NULL。 – 2010-11-04 09:56:15
Ardman我同意,「其他如果」可能是一個「其他」:) – MikeStichling 2010-11-04 10:00:19