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