我試圖實現一些我不知道如何去做的事情。我正在基於ASP Classic和SQL 2008,IIS7的網站上工作。在搜索頁面中,我可以選擇每個查詢有幾個值,如default.asp?q=one|two|three&q2=four|five|six
。
我試圖做的是使用通配符萬一我的查詢沒有價值,並有能力同時在一列中搜索幾個單詞,以防萬一我的查詢有夫婦價值。下面是我想做的事:具有多值的SQL複雜搜索查詢
- 如果查詢值然後去罰款,在數據庫中(這是非常簡單)
- 如果查詢夫婦與價值分離「|」然後將它們分開並搜索它們全部。
- 如果查詢完全沒有價值,則使用通配符,不要搜索 。
因此,爲了達到這個目的,我嘗試了幾件事情,但沒有取得任何成功。這是我的代碼的例子。
一個-----------
@style nVarchar(150) = ''
Select * FROM mytable WHERE CONTAINS(style, @style) AND ...
我可以設法查詢拆分成類似'"* value1 *" OR "* value2 *"'
,以獲得最好的結果了包含但是這一個是工作,如果「風格「有價值。如果樣式沒有價值,則不存在通配符,因此我可以在不過濾數據庫的情況下檢索所有數據。
兩個---------------
@style nVarchar(150) = ''
Select * FROM mytable WHERE style LIKE '%' + @style + '%' AND ...
隨着LIKE子句我可以使用通配符像'%'
的情況下,風格沒有任何價值,但我不能搜索夫婦值在同一列。
所以,請記住我使用「存儲過程」,因爲這是一種複雜的,我需要在幾個地方使用它。我將有10-12查詢此搜索。
任何想法都會幫助我實現這一目標。
謝謝你的時間。它確實有幫助,但是你能否稍微解釋一下外部應用?就像在「SELECT c.value('text()[1]','varchar(50)')AS v FROM @ v.nodes('// n')AS t(c)」中發生的那樣。非常感謝。 – Jay 2012-04-27 18:06:29
OUTER或CROSS APPLY是允許爲查詢返回的每一行調用表函數的運算符。檢查SQL Server聯機叢書上的[documentation](http://msdn.microsoft.com/en-us/library/ms175156(v = SQL.90).aspx),這裏很好解釋。子查詢SELECT c.value ...用於從基於「value1 | value2 | value3」文本創建的Xml中提取行集。 nodes()函數返回XPath指定的節點「// n」和c.value('text()[1]'...)提取文本。 value()方法需要index [1]來指示第一個文本節點。 – 2012-04-28 12:54:04
感謝您的解釋。我會繼續閱讀該文檔。如果我有幾個查詢,我不得不復制這個時間到我的查詢? – Jay 2012-04-29 17:07:55