데이터베이스 개발자 질문과 답변 게시판
안녕하세요 쿼리를 만들다가 먼가 다른 방법이 있지 않을까 싶어서 질문해 봅니다.
PlayDataTemp가 있는데 여기에 각 계정에 대한 점수 정보가 들어 있습니다. 그리고 11111이란 계정에 대한 친구가 22222, 33333이라고 합니다. 그러면 친구에 대한 점수 정보를 얻기 위해서는 아래의 쿼리를 실행하면 되거든요.
SELECT * FROM PlayDataTemp WHERE Account_Id IN(22222, 33333)
친구 정보가 테이블에 있는 것이 아니라 파라미터로 받아야 하는 상황이라 위의 쿼리로 해야 하는데 그래서 만든 프로시저가 아래와 같습니다.
CREATE PROC [dbo].[USP_PLAY_TEMP]
@FriendList VARCHAR(1024)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Query NVARCHAR(1024)
SET @Query = 'SELECT * FROM PlayDataTemp WHERE Account_Id IN '
SET @Query = @Query + '(' + @FriendList + ')'
EXECUTE SP_EXECUTESQL @Query
END
[USP_PLAY_TEMP] @FriendList='11111,22222'
위의 쿼리의 경우 미리 컴파일이 되지 않기 때문에 성능이 좀 떨어질 수 있을 것 같은데요.
다른 방법이 있을까요?
아래는 테이블을 만들고 데이터를 넣어주는 쿼리입니다.
CREATE TABLE [dbo].[PlayDataTemp](Account_Id BIGINT NOT NULL, Score INT NOT NULL);
GO
INSERT [dbo].[PlayDataTemp] (Account_Id, Score) VALUES (11111, 100);
INSERT [dbo].[PlayDataTemp] (Account_Id, Score) VALUES (22222, 200);
INSERT [dbo].[PlayDataTemp] (Account_Id, Score) VALUES (33333, 300);
INSERT [dbo].[PlayDataTemp] (Account_Id, Score) VALUES (44444, 400);
INSERT [dbo].[PlayDataTemp] (Account_Id, Score) VALUES (55555, 500);
GO
SELECT * FROM PlayDataTemp WHERE Account_Id IN(22222, 33333)
좋은 방법 있으면 부탁 좀 드리겠습니다.
Comment 1
-
뭉실이
2013.01.18 10:54
split 으로 검색하면 결과 나오겠네요.
프로그래밍 언어의 split 함수를 sql 로 구현한게 있습니다. 파라미터 갯수도 적다면 성능영향도 크게 없을겁니다.
(시퓨 약간 더쓰지만 동적쿼리보단 낫지요)
그렇게 서브쿼리하는식으로 바꾸시면 됩니다.