2013-05-19 5 views
0

가 여기 내 경우가 SQL 서버에있는 파일을 검색, 나는 UDF 기능이

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) 

그럼 내가 원하는 ...하는 PRODUCTS 테이블

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

가 그럼 난 일부 데이터로 채우기가 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"키워드를 검색하는 것이므로 실행시 아무 것도 표시되지 않습니다. 누구든지 도와주고 싶어 ??? 내가 말했듯이

+1

30)'** char (30)'대신 정의 된 길이의 30 문자를 공백으로 채 웁니다 ... –

+0

그래, 할게. 그것 ....하지만 문제는 어떻게 구문 내 쿼리 선택 * 제품에서 '% @ 이름 %', 같은 .... ??? 내 실수가 어디 있는지 아십니까 ??? –

+0

시도 :'LIKE @Name + '%' ' –

답변

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') 

결과 집합을 반환 : 당신이 (**`VARCHAR를 사용한다 추천

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

당신의 제안에 감사드립니다 .... 나는 그것을 매우 고맙습니다 –

+1

내 upvote 있어요. :) –

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

고마워요.하지만 실행시 아무 것도 보여주지 않아요. select * from dbo.products_fun ('Samsung') –

+0

매개 변수의'char (30)'데이터 유형은 당신이 넘겨주는 모든 것이 패딩 될 것임을 의미합니다 뒤 공백. –

+0

업데이트 : 12 시간 후 답변을받지 못했습니다. 죄송합니다. –