UDF用于在SQL Server中搜索文件的函数

时间:2013-05-19 10:35:15

标签: sql sql-server function

这是我的情况,我有PRODUCTS

create table PRODUCTS 
(
  ID_PRODUCTS           CHAR(10) primary key not null,
  NAME                  CHAR(30),
  PRICE                 INTEGER
)

然后我填写一些数据,......

insert into PRODUCTS values('B1','Samsung Galaxy Ace 2',250)
insert into PRODUCTS values('B2','Samsung Galaxy Tab 3',375)
insert into PRODUCTS values('B3','Samsung Galaxy Note 2',700)
insert into PRODUCTS values('B4','Apple iPod Touch',200)
insert into PRODUCTS values('B5','Apple Macbook Pro',1250)

然后我想创建一个存储函数,以便根据NAME表中PRODUCTS列上的关键字搜索数据。例如,当我使用Samsung关键字执行该功能时,它应该显示名称中包含单词Samsung的列表。我希望列表将是这样的外观

ID_PRODUCTS | NAME | PRICE
========================================
B1 | Samsung Galaxy Ace 2 | 250
B2 | Samsung Galaxy Tab 3 | 375
B3 | Samsung Galaxy Note 2 | 700

这是代码,但在执行时(select * from dbo.products_fun

它没有显示任何内容
create function product_fun
(
   @name char(30)
)
returns TABLE
as
   return 
   (select * from products where name like '%@name%')

我认为它没有显示任何内容,因为查询

select * from products where name like '%@name%'

这不是在变量@name,...中搜索关键字,而是搜索关键字“@name”,...这就是为什么它在执行时没有显示任何内容。有人想帮忙???

2 个答案:

答案 0 :(得分:3)

正如我所说 - 对于像产品名称这样的东西,我会从不使用char(x)值。 char(x)只能用于长度为3-5个字符的固定长度字符串,例如ISO国家/地区代码或货币符号等。其他任何内容都应为varchar(x)

这段代码很好用:

CREATE TABLE PRODUCTS1
(ProductID INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
 ProductName VARCHAR(30),
 ProductPrice DECIMAL(16,2)
)

insert into PRODUCTS1(ProductName, ProductPrice) values('Samsung Galaxy Ace 2',250.0)
insert into PRODUCTS1(ProductName, ProductPrice) values('Samsung Galaxy Tab 3',375.0)
insert into PRODUCTS1(ProductName, ProductPrice) values('Samsung Galaxy Note 2',700.0)
insert into PRODUCTS1(ProductName, ProductPrice) values('Apple iPod Touch',200.0)
insert into PRODUCTS1(ProductName, ProductPrice) values('Apple Macbook Pro',1250.0)
GO

CREATE FUNCTION FindProducts (@name varchar(30))
RETURNS TABLE
AS
   RETURN (SELECT * FROM dbo.Products1 WHERE Productname LIKE @name + '%' )

现在调用此函数:

SELECT * FROM dbo.FindProducts('Samsu')

返回此结果集:

ProductID   ProductName             ProductPrice
   1        Samsung Galaxy Ace 2       250.00
   2        Samsung Galaxy Tab 3       375.00
   3        Samsung Galaxy Note 2      700.00

答案 1 :(得分:1)

create function product_fun
(
    @name varchar(30)
)
returns TABLE
as
return 
(
    select * from products 
    where name like '%' + @name + '%'
)