여러가지 조건에따라 검색하게 Where 절을 만드려고하는데요
예를들어 검색 조건이 이름/나이/성별/날짜 라고 하면요
검색조건에 체크밖스가 있는것이아니라
입력된것만 조건을 줘서 조회하려고하는데 Where절을 어떡해 해야할까요
제가 시도해본것은..
if 이름 <>''
@변수 = @변수 + ' 이름 = @이름 and '
.
.
.
Select * from Table Where @변수
이렇게 해보았는데 안되더라구요... ( 물론 뒤에 and는 제거했구요..)
제말이 무슨뜻인지 이해하셧을거라 생각하고 ㅠㅠ
저런의도로 쿼리를 짜려면 어떡해 해야할까요
도움 부탁드립니다
Comment 7
-
초짜해커
2014.12.04 13:56
DECLARE @이름 VARCHAR(10)DECLARE @나이 VARCHAR(10)DECLARE @성별 VARCHAR(10)DECLARE @날짜 VARCHAR(10)DECLARE @QUERY VARCHAR(1000)SET @QUERY = 'SELECT * FROM TBL1 WHERE 1 = 1'IF @이름 <> '' SET @QUERY = @QUERY + ' AND 이름 = ''' + @이름 + ''''IF @나이 <> '' SET @QUERY = @QUERY + ' AND 나이 = ' + @나이IF @성별 <> '' SET @QUERY = @QUERY + ' AND 성별 = ''' + @성별 + ''''IF @날짜 <> '' SET @QUERY = @QUERY + ' AND 날짜 = ''' + @날짜 + ''''EXEC (@QUERY) -
Sinlay
2014.12.05 14:02
답변감사합니다 제가원했던 답변입니다.
그런데
SET @QUERY = ' SELECT @변수1 = 변수1, @변수2 = 변수2 FROM TBL1'
이런식으로 하였더니
@변수1 을 자꼬 선언해 달라고 하네요...
이미 선언했는데도 말이죠......어떡해 해야하죠?
-
초짜해커
2014.12.05 14:40
선언 안하셨네요.
EXEC (@QUERY) 라고 명령하면
@QUERY에 담긴 문장이 단독으로 실행됩니다.
그러면 SSMS창에
SELECT @변수1 = 변수1, @변수2 = 변수2 FROM TBL1
이라고 쓰고 F5를 누른것과 같죠.
-
초짜해커
2014.12.05 14:53
원하시는게 이런거일듯...
DECLARE @이름 VARCHAR(10)
DECLARE @나이 VARCHAR(10)
DECLARE @성별 VARCHAR(10)
DECLARE @생일 VARCHAR(10)
DECLARE @QUERY NVARCHAR(1000)
SET @QUERY = 'SELECT @이름 = 이름, @나이 = 나이, @성별 = 성별, @생일 = 생일 FROM TBL1 WHERE 1 = 1'
IF @이름 <> '' SET @QUERY = @QUERY + ' AND 이름 = ''' + @이름 + ''''
IF @나이 <> '' SET @QUERY = @QUERY + ' AND 나이 = ' + @나이
IF @성별 <> '' SET @QUERY = @QUERY + ' AND 성별 = ''' + @성별 + ''''
IF @생일 <> '' SET @QUERY = @QUERY + ' AND 생일 = ''' + @생일 + ''''
PRINT @QUERY
EXEC SP_EXECUTESQL @QUERY, N'@이름 VARCHAR(10) OUTPUT, @나이 VARCHAR(10) OUTPUT, @성별 VARCHAR(10) OUTPUT, @생일 VARCHAR(10) OUTPUT', @이름 = @이름 OUTPUT, @나이 = @나이 OUTPUT, @성별 = @성별 OUTPUT, @생일 = @생일 OUTPUT
SELECT @이름, @나이, @성별, @생일
-
Sinlay
2014.12.05 17:58
답변 정말정말 감사드립니다
덕분에 원하는 답에 근접했습니다
하나만 더 질문드리자면..
제가 사실 저 문장을 프로시저로 만든것인데
프리시저 변수1 변수2 변수3 변수4 변수5
하면 변수 5개 조건으로 검색해서
OUTPUT으로 출력해주는건데요...
알려주신대로 결과값까지 돌아오지만
검색 조건대로라면 여러개가 조회되어야하는데 하나만 조회가 되네요 ㅠㅠ
책에서는 기본적인것만 나와있어서 뒤져도 정보를 얻기가 너무힘들네요 ㅠㅠ
프로시저로하면 원래 1개의 값만 출력하는건가요 ㅠㅠ?
아니면 더 해줘야할게 있는건가요?
매번 답변해주셔서 정말감사합니다.
이 프로시저를 만들는 목적에는...
어떤 조건을 받으면 그 조건에 대한 리스트를 제공하는것입니다.
-
더따뜻한
2014.12.04 15:51
Select * from Table
where (case 이름 when "철수" then 1
when "영희" then 1
when "돌쇠" then 1
else 0 end) = 1
저는 급할 때는 이렇게 씁니다.
성능은 보장하지 않습니다만.... ^^ 걸리면 혼나긴 해요. ^^
아니면 위에 분 처럼 다이나믹 쿼리로 만들어서 쓰면 되고. ^^
-
Sinlay
2014.12.05 14:03
답변감사합니다~
하지만 제가 원했던 방법은
윗분의 답변에 더 가깝네요~
그래도 다음에 참고하겠습니다^^