在SQL Server 2008中使用LIKE作为字符串

时间:2014-01-28 19:30:38

标签: sql sql-server sql-server-2008

我想创建一个在表中搜索的函数,并返回包含我插入的某个单词的行,如下所示。但是,当我使用LIKE时,它会给我一个错误:'@perberesi'附近的语法不正确

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

请帮助我...在这种情况下如何使用LIKE

3 个答案:

答案 0 :(得分:2)

尝试使用:
        '%' + @perberesi + '%'

而不是:
        %@perberesi%

Some Examples

答案 1 :(得分:1)

好的,我刚刚意识到你正在创建一个函数,这意味着你不能使用INSERT。您还应该采用Gordon的建议并使用显式连接和表别名。

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

答案 2 :(得分:1)

为什么必须定义返回表?

以下是内联表变量函数,其性能优于多行表。我写了一个返回有两个字母'id'的列。只需根据自己的情况进行修改。

参见Wayne Sheffield的文章。

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

但是,由于表达式前面的like子句中有'%',因此可能会进行完整的表或索引扫描。如果数据很大,您可能希望查看全文索引。

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