Ms-sql where (in) 질문

안녕하세요. :smile:

MS-SQL에서 WHERE IN? 사용 시 궁금한 점이 있어 질문드립니다.

SELECT CODE
     , NAME
  FROM USERS
 WHERE CODE IN (1, 2, 6, 7)

위와 같은 쿼리에서 제가 하고 싶은게 있는데요.

int[] codes = { 1, 2, 6, 7 };

SELECT CODE
     , NAME
  FROM USERS
 WHERE CODE IN (codes)

이런 방식으로 상단에 배열 변수처럼 선언하여 사용할 수 있을까요?
(쿼리에서 해결)

읽어주셔서 감사합니다!

1개의 좋아요

이럴 때 흔히 사용해봄직한게 Join Query나 Sub Query, 혹은 Temp Table 같은 것이 있을 것 같습니다. 논리적으로 연관 관계가 명확하다면 Join Query와 Index를 잘 사용하는 것이 데이터베이스에 부담을 끼치지 않는 가장 바람직한 방법이 될 것 같습니다. (데이터베이스가 스스로 처리해야 하는 연상의 양도 부담이고, 로컬에서 데이터베이스로 보내는 쿼리의 횟수가 많은 것도 부담이 되는 것을 모두 감안해야 합니다.)

3개의 좋아요

@rkttu 아하 자세한 설명 감사합니다. :smile:
쿼리 상황이 IN을 통해 특정 변수들을 입력해야하는데,
쿼리 전체가 좀 길어서 상단에 int[] codes; 변수처럼 선언해주고 사용할 수 있을까 해서요!!

Temp Table을 사용한다면 더 번거로워질까요?

mssql 의 stored procedure 에서 내부에 배열을 선언하고 싶으시다는건가요?
아니면 c# 에서 배열을 쿼리에 넣고 sqlcommand 로 돌리고 싶으시다는건가요?

1개의 좋아요

@bluepope 네 맞습니다. C#이 아닌 쿼리쪽에서 사용하고 싶습니다. 설명이 좀 부족했네요.

sp 에서 사용하신다면 #temp 테이블을 선언하여 insert 후 join 하거나 in 으로 사용하시면 될 것 같습니다

1개의 좋아요

다들 조언 해주신대로 해봤습니다.

그리고 혹시 나 저처럼 필요하신 분을 위해 쿼리도 남겨놓습니다!

DECLARE @codes table (code int);
 INSERT @codes(code) values(1), (2), (6), (7);    

SELECT CODE
  FROM USERS
 WHERE CODE IN (SELECT CODE FROM @codes)

감사합니다. :smile:

6개의 좋아요