我想创建一个在表中搜索的函数,并返回包含我插入的某个单词的行,如下所示。但是,当我使用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
答案 0 :(得分:2)
答案 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的文章。
-- 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子句中有'%',因此可能会进行完整的表或索引扫描。如果数据很大,您可能希望查看全文索引。