简体   繁体   English

对SQL Server 2008中的字符串使用LIKE

[英]Use LIKE for strings in sql server 2008

I want to make a function that search in a table and returns rows that contain a certain word that I Insert like below. 我想制作一个在表中搜索并返回包含我要插入的特定单词的行,如下所示。 But when I use LIKE it give me an error: Incorrect syntax near '@perberesi' 但是,当我使用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

Pleae help me...How can I use LIKE in this case 请帮助我...在这种情况下如何使用LIKE

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

instead of: 代替:
%@perberesi%

Some Examples 一些例子

Ok, I just realized that you are creating a function, which means that you can't use INSERT . 好的,我刚刚意识到您正在创建一个函数,这意味着您不能使用INSERT You should also really take Gordon's advice and use explicit joins and table aliases. 您还应该真正听取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

Why do you have to define the return table? 为什么必须定义返回表?

The following is a inline table variable function that performs better than a multi-line table. 下面是一个内联表变量函数,其性能比多行表更好。 I wrote one to return columns that have the two letters 'id'. 我写了一个返回具有两个字母“ id”的列。 Just modify for your own case. 只需根据自己的情况进行修改。

See article from Wayne Sheffield. 请参阅韦恩·谢菲尔德的文章。

http://blog.waynesheffield.com/wayne/archive/2012/02/comparing-inline-and-multistatement-table-valued-functions/ 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

However, since you have a '%' in the like clause at the front of the expression, a full table or index scan is likely. 但是,由于表达式的like子句中有一个'%',因此可能会进行全表扫描或索引扫描。 You might want to look at full text indexing if you data is large. 如果数据很大,您可能希望查看全文索引。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM