0

これが私の場合です、私は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" の検索なので、実行しても何も表示されません。誰でも助けたい???

4

2 に答える 2

3

私が言ったように、製品名のようなものには、決して値を使用しませんchar(x)char(x)は、ISO 国コードや通貨記号など、長さが 3 ~ 5 文字の固定長文字列にのみ使用する必要があります。それ以外は . にする必要があります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
于 2013-05-19T11:11:57.230 に答える
1
create function product_fun
(
    @name varchar(30)
)
returns TABLE
as
return 
(
    select * from products 
    where name like '%' + @name + '%'
)
于 2013-05-19T10:36:58.583 に答える