这是我的情况,我有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”,...这就是为什么它在执行时没有显示任何内容。有人想帮忙???
答案 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 + '%'
)