상세 컨텐츠

본문 제목

검색쿼리(090326)

청강컴정/Board

by luckey 2009. 3. 26. 20:34

본문

create table board
(
    id int identity(1,1),
    name nvarchar(10),
    contents nvarchar(1000),
    email varchar(100),
    password varchar(20)
)

listbox의 검색 조건과 검색내용을 입력받아 검색된 결과를 출력한다.
검색조건은 name, contents, email 으로 되어 있으며 검색내용은 무작위 입력이기 때문에 like를 사용한다.
하나의 프로시져로 전체보기와 검색을 동시에 하려고 하다보니....
따로 짤껄 그랬나...;;
머 페이징도 넣어야 하고.. 하나의 쿼리로 하는것이.. 낳지 않을까 생각해본다.
null값 체크 부분은 함수로 빼서 처리

--- 검색 프로시져 ---
create proc select_board
(
 @schType nvarchar(10),
 @schText nvarchar(20)
)
as
begin

if(@schText is null or @schText = '')
begin
    select 
    id, 
    aspnet.dbo.nullChk(name) as name, 
    aspnet.dbo.nullChk(contents) as contents, 
    aspnet.dbo.nullChk(convert(varchar(10),date,120)), 
    aspnet.dbo.nullChk(email) as email, 
    aspnet.dbo.nullChk(password) as password 
    from board
    order by id desc
end
else
begin
    select 
    id, 
    aspnet.dbo.nullChk(name) as name, 
    aspnet.dbo.nullChk(contents) as contents, 
    aspnet.dbo.nullChk(convert(varchar(10),date,120)), 
    aspnet.dbo.nullChk(email) as email, 
    aspnet.dbo.nullChk(password) as password 
    from board
    where
    case @schType
        when 'name' then name
        when 'contents' then contents
        when 'email' then email
    end 
    like
'%'+@schText+'%'
    order by id desc
end
end

--- nullChk() ---
create function [dbo].[nullChk]
(
 @text nvarchar(max)
)
Returns nvarchar(max)
as
begin
declare @return nvarchar(max)
if(@text is null)
begin
 set @text = 'no date'
end
return (@text)
end

관련글 더보기

댓글 영역