如何解決SQL Server中傳入select語句in范圍參數
如何解決SQL Server中傳入select語句in范圍參數呢?下面將為您解析產生該問題的原因,以及相應的解決辦法,供您參考,希望對您有所啟迪。
columns :
customerCode string
customerName string
customerGroup string
customerRouteNum string
...........
現在為了查處選定的cusotmerCode的Customer的全部信息并顯示在界面上(總共的customer數量為11029),每次讀一個,顯然很慢,因為可以多選,可能1個,可能是所有,所以讀出所有然后剔出未選的,效率也不高。
因此開始采用存儲過程:
CREATE PROCEDURE TS_GetCustomersByNames
( @custCodes nvarchar(3700)
) AS
select * from customer
where customerName in (@custNames)
一直得不到正確結果,發現不論傳入參數 @custNames = N'''Taste Of Punjab (Tsim Sha Tsui)'',''Lily Food Wholesales (Tuen Mun)'''
還是 @custNames = N'Taste Of Punjab (Tsim Sha Tsui),Lily Food Wholesales (Tuen Mun)'(注:其實這種明顯不對,試驗一下而已)
但如果用select * from customer
where customerName in (''Taste Of Punjab (Tsim Sha Tsui)'',''Lily Food Wholesales (Tuen Mun)')---- (X)
當然是有正確結果的。
那原因是什么呢?
原因是: @CustCodes作為參數傳入時,編譯處理導致實際執行的不同于語句(X)。
但我們就是要得到語句(X)的結果,怎么解決呢?辦法是使用Exec執行,如下:
declare @sql nvarchar(3800)
set @sql = 'select * from customer where customerCode in ( '+ @custCodes + ')'
exec ( @sql )
GO
【編輯推薦】
對SQL Server中任意select語句分頁的存儲過程