2012-07-30 59 views
0

我在與樣本數據表中的列如下:SQL CHAR指數的WHERE子句中搜索字符串

ServiceTypeIds 
7,1 
1,9 
1 
9 
4 
7 
7 

在我的Where子句我使用以下方法來搜索就可以了:

WHERE (@ServiceTypes IS NULL 
    OR CHARINDEX(','+CAST(SEP.ServiceTypeIDs as VARCHAR(255))+',' 
       , ','[email protected]+',') > 0))) 

如果我的參數@ServieTypes等於'1,9',那麼我會得到結果,但是當它的@ServiceTypes ='1'或'9'時,我不會收到任何迴應。我卡住了,並嘗試上述。

+0

請不要採取這種錯誤的方式,但你的情況就是分隔字符串是令人難以接受的。一列,一個值。當使用第三範式表單設計時,查詢性能會更好。如果可能的話,重新設計桌子是合適的。從長遠來看,它會爲你節省很多。 – 2012-07-30 01:36:33

+0

我明白了,我繼承了這個應用程序,當時根本不需要從頁面上搜索這個標準。即時通訊使用MVC,如果我創建一個新的表,我必須在很多地方修改代碼,所以由於時間限制,我只需要一個修復存儲過程現在.. – 2012-07-30 01:39:47

+0

我會[TVF](http:// msdn.microsoft.com/en-us/library/ms191165%28v=sql.105%29.aspx)將這些值轉換爲一個表(表變量,但足夠接近)。這些列只是主鍵,和一個「serviceTypeID」。您可以加入主鍵,並根據列進行搜索。它也會將值轉換爲實際的表格,因爲代碼只需要很少的修改。 – 2012-07-30 01:54:02

回答

3

我覺得你有你的參數逆轉:

WHERE (@ServiceTypes IS NULL 
     OR CHARINDEX(','+CAST(@ServiceTypes as VARCHAR(255))+',', 
        ','+SEP.ServiceTypeIDs+',') > 0))) 

此方法,但只有當你正在尋找一個項目(或者是幸運的兩個項目恰好是在同一個序列)。

0

替代方法

WHERE (@ServiceTypes IS NULL 
    OR ','[email protected]+',' LIKE '%,'+CAST(SEP.ServiceTypeIDs as VARCHAR(255))+',%') 
+0

這不起作用 – 2012-07-30 12:54:54

相關問題