2014-10-07 35 views
-2

我希望在我的函數中使用CONTAINS,但CONTAINS(@Ubicacion,TP.Ubicacion)不接受我的輸入參數@Ubicacion這是一個varcharCONTAINS in sql函數

出了什麼問題?

請幫助我嗎?由於

ALTER FUNCTION [dbo].[fn_BuscaTiempo] 
(
    @Destino CHAR(3), 
    @Ubicacion NVARCHAR(MAX) 
) 
RETURNS TIME 
BEGIN 
    DECLARE @Tiempo TIME  

    SELECT @Tiempo = TP.Tiempo 
    FROM mar_TiemposArribo TP 
    WHERE TP.Destino = @Destino 
     AND CONTAINS(@Ubicacion, TP.Ubicacion) 

    RETURN @Tiempo 
END 
+0

你的意思'和TP.Ubicacion LIKE「%」 + @Ubicacion +「%」',而不是它應該是'包含( TP.Ubicacion,@ Ubicacion)' – 2014-10-07 15:30:17

+0

「不接受」是什麼意思?你有錯誤信息嗎?如果是這樣,那是什麼?此表是否確實定義了全文目錄? [表名上的模式前綴在哪裏?](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/11/bad-habits-to-kick-avoiding-the-schema-prefix.aspx )另外,如果多於一行匹配條件呢?你關心你得到哪一排?目前,您無法控制... – 2014-10-07 15:31:52

+0

@Ubicacion接收輸入參數,如'17000 IH-10 West,San Antonio,Texas'和'mar_TiemposArribo TP'TP.Ubicacion有一個位置,如'Colorado,美國','德克薩斯州聖安東尼奧'...我希望找到所有的方向,包括4個例子'德克薩斯州聖安東尼奧' – Monse 2014-10-07 15:42:29

回答

1

我想AD.Net的第一個猜測是正確的,你只是混淆了該函數的參數順序錯誤。 (即您要搜索與列TP.Ubicacion@Ubicacion的內容行)

根據msdn,第一個參數應爲列名或列名單,第二個是你搜索的詞;適用於你的例子

CONTAINS(TP.Ubicacion, @Ubicacion) 
+0

一個選擇,否則做?在@Ubicacion裏面搜索TP.Ubicacion – Monse 2014-10-07 16:23:04

+0

@Monse是的; ['CHARINDEX'](http://msdn.microsoft.com/en-us/library/ms186323.aspx#United%20States%20%28English%29)返回在varchar中找到某個字符串的索引(max),nvarchar(max)或varbinary(max)**不是基於零的**,如果未找到字符串,則返回0;如果在第一個索引處找到1,則返回1 ... – DrCopyPaste 2014-10-07 21:21:15

0

因爲含有作爲我需要的功能不工作,我改變包含 LIKE

ALTER FUNCTION [dbo].[fn_BuscaTiempo] 
(
    @Destino CHAR(3), 
    @Ubicacion VARCHAR(120)  
) 

RETURNS TIME 

BEGIN 
    DECLARE @Tiempo TIME  
    SELECT @Tiempo=TP.Tiempo FROM mar_TiemposArribo TP WHERE [email protected] AND @Ubicacion **LIKE '%'+ TP.Ubicacion + '%'**  *--CONTAINS(@Ubicacion,TP.Ubicacion)*  
RETURN @Tiempo 
END 

@Ubicacion接收像「17000 IH輸入參數-10西,聖 安東尼奧,德克薩斯'和表'mar_TiemposArribo TP'TP.Ubicacion有 位置,如'科羅拉多州,美國','聖安東尼奧,德克薩斯州'... iw十歲上下發現 ,其中包括4例來自所有方向「聖安東尼奧」