2014-01-28 26 views
0

我想創建一個函數,在表中進行搜索並返回包含我插入的某個單詞的行,如下所示。但是,當我用喜歡它給我一個錯誤:附近有語法錯誤@perberesi「在sql server 2008中使用LIKE作爲字符串

CREATE FUNCTION perberesit7 
(@perberesi varchar(100)) 
RETURNS @menu_rest TABLE 
(emri_hotelit varchar(50), 
emri_menuse varchar(50), 
perberesit varchar(255)) 
AS 
Begin 
    insert into @menu_rest 
    Select dbo.RESTORANTET.Emri_Rest, dbo.MENU.Emri_Pjatës, dbo.MENU.Pershkrimi 
    From RESTORANTET, MENU 
    Where dbo.MENU.Rest_ID=dbo.RESTORANTET.ID_Rest and 
      dbo.MENU.Pershkrimi LIKE %@perberesi% 

    return 

End 

Pleae幫我...我如何使用LIKE在這種情況下

+0

你有什麼理由使用multistep TVF而不是inline TVF嗎? –

+1

你得到錯誤的原因是因爲你的LIKE子句沒有單引號來表示你正在尋找的字符串。 – Ellesedil

回答

1

好吧,我只是意識到你正在創建一個功能,這意味着您不能使用INSERT。你也應該真正接受戈登的建議,並使用顯式連接和表別名。

CREATE FUNCTION perberesit7(@perberesi varchar(100)) 
RETURNS @menu_rest TABLE ( emri_hotelit varchar(50), 
          emri_menuse varchar(50), 
          perberesit varchar(255)) 
AS 
Begin 
    return(
    Select R.Emri_Rest, M.Emri_Pjatës, M.Pershkrimi 
    From RESTORANTET R 
    INNER JOIN MENU M 
     ON M.Rest_ID = R.ID_Rest 
    Where M.Pershkrimi LIKE '%' + @perberesi + '%') 
End 
+0

'具有返回值的RETURN語句不能在此上下文中使用.' –

+0

http://blog.waynesheffield.com/wayne/archive/2012/02/comparing-inline-and-multistatement-table-valued-functions/ - 開始和結束將其變成慢速多線功能。使用'%'+ @perberesi會導致掃描。 –

1

爲什麼你必須定義返回表?

以下是內聯表變量函數,它比多行表執行得更好。我寫了一個返回有兩個字母'id'的列。只是修改你自己的情況。

查看韋恩謝菲爾德的文章。

http://blog.waynesheffield.com/wayne/archive/2012/02/comparing-inline-and-multistatement-table-valued-functions/

-- Use tempdb 
use tempdb; 
go 

-- Simple ITVF 
create function search_columns (@name varchar(128)) 
returns TABLE 
return 
(
select * from sys.columns where name like '%' + @name + '%' 
) 
go 

-- Call the function 
select * from search_columns('id'); 
go 

不過,既然你在表達式的前面有類似條款在「%」,全表或索引掃描是可能的。如果數據很大,您可能需要查看全文索引。

http://craftydba.com/?p=1629

相關問題