[英]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
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. 如果数据很大,您可能希望查看全文索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.