2011-04-20 3 views
0

가능한 중복 합격 :
Parameterizing a SQL IN clause?SQL 서버 2005 : 두 개 이상의 문자열을 하나의 문자열로 및 매개 변수로

안녕 모두,

나는에 대한 SQL 명령을 쓰고 있어요 내 프로젝트. 하나의 문자열 매개 변수를 커서에 전달해야합니다. 그러나 해당 매개 변수에 나는이처럼 많은 문자열을 연결해야합니다 :

DECLARE @strParam VARCHAR(MAX) 
    SET @strParam = 'string1' + ',' + 'string2' + ',' ... etc 

가 그럼 난 이렇게 사용하려면 :

SELECT * FROM tblResult WHERE Field1 IN (@strParam) 

대신 다음과 같은 성명 :

SELECT * FROM tblResult WHERE Field1 IN ('string1' + ',' + 'string2' + ',' ... etc) 

그래서 우리는 위에서 설정 한 형식을 가져야합니다. 어떻게하면됩니까?

최고 감사합니다, 레즈

+0

당신이 이미 가지고있는 코드에 어떤 문제가 있습니까? 질문을 더 명확히하십시오. –

+0

내가하고 싶은 일은이 문장에서 @strParam을 사용하고 싶다. SELECT * FROM tblResult Where Field1 IN (@strParam)하지만 우리가 이렇게 실행하면 @strParam은이 형식 ('string1', 'string2')이 아니다. , 권리? 따라서 SELECT 문은 요구 결과를 얻지 못합니다. – RedsDevils

답변

0

를이 테이블에 CSV를 분할합니다.

CREATE FUNCTION GetIDs(
    @ids_csv  nvarchar(255)) 
    RETURNS @table_ids TABLE 
    (
     ID INT, 
     PRIMARY KEY(ID) 
    ) AS 
BEGIN 
    DECLARE @app_id varchar(10) 
    DECLARE @pos int 
    SET @ids_csv = LTRIM(RTRIM(@ids_csv))+ ',' 
    SET @pos = CHARINDEX(',', @ids_csv, 1) 
    IF REPLACE(@ids_csv, ',', '') <> '' 
    BEGIN 
     WHILE @pos > 0 
     BEGIN 
      SET @app_id = LTRIM(RTRIM(LEFT(@ids_csv, @pos - 1))) 
      INSERT INTO @table_ids(ID) VALUES(@app_id) 
      SET @ids_csv = RIGHT(@ids_csv, LEN(@ids_csv) - @pos) 
      SET @pos = CHARINDEX(',', @ids_csv, 1) 
     END 
    END 
    RETURN 
END 

그렇다면, 당신은이 작업을 수행 할 수 있습니다

SELECT * FROM tblResult WHERE Field1 IN (SELECT * FROM GetIDs(@strParam)) 
+0

위의 코드는 문자열이 아니라 정수를 분리한다는 것을 알게되었습니다. 그 차이를 주목하십시오. – Blazes

+0

감사합니다! 나는 그것을 곧 시도 할 것이다! – RedsDevils

관련 문제