테이블 값 매개 변수 (SQl Server 2008의 새로운 기능)를 사용하십시오. 실제 테이블 매개 변수 유형을 생성하여 설정을 :
이
CREATE TYPE IntTableType AS TABLE (ID INTEGER PRIMARY KEY)
귀하의 절차는 다음과 같다 :
Create Procedure up_TEST
@Ids IntTableType READONLY
AS
SELECT *
FROM ATable a
WHERE a.Id IN (SELECT ID FROM @Ids)
RETURN 0
GO
당신은 테이블 값 매개 변수를 사용하여 볼 수없는 경우 : "Arrays and Lists in SQL Server 2008 Using Table-Valued Parameters" by Erland Sommarskog을 한 후 여러 가지 방법이 있습니다 SQL Server에서 문자열을 분할합니다. 이 문서에서는 거의 모든 방법의 장단점을 설명합니다 : 당신은 분할 기능을 만들 필요가
"Arrays and Lists in SQL Server 2005 and Beyond, When Table Value Parameters Do Not Cut it" by Erland Sommarskog
. 이것은 분할 기능을 사용할 수있는 방법입니다 :
SELECT
*
FROM YourTable y
INNER JOIN dbo.yourSplitFunction(@Parameter) s ON y.ID=s.Value
I prefer the number table approach to split a string in TSQL하지만, SQL 서버에서 문자열을 분할 각각의 장단점을 설명하고 이전 링크를 참조하는 방법에는 여러 가지가 있습니다.
SELECT TOP 10000 IDENTITY(int,1,1) AS Number
INTO Numbers
FROM sys.objects s1
CROSS JOIN sys.objects s2
ALTER TABLE Numbers ADD CONSTRAINT PK_Numbers PRIMARY KEY CLUSTERED (Number)
[숫자 테이블이 설정되면 다음 번호 테이블 방법
는 1 만에 행을 포함하는 테이블
Numbers
을 만듭니다이 한 번 테이블 설정을 할 필요가 작동합니다 이 분할 함수를 만들 : 이제 쉽게 테이블에 CSV 문자열을 분할 할 수 있습니다
CREATE FUNCTION [dbo].[FN_ListToTable]
(
@SplitOn char(1) --REQUIRED, the character to split the @List string on
,@List varchar(8000)--REQUIRED, the list to split apart
)
RETURNS TABLE
AS
RETURN
(
----------------
--SINGLE QUERY-- --this will not return empty rows
----------------
SELECT
ListValue
FROM (SELECT
LTRIM(RTRIM(SUBSTRING(List2, number+1, CHARINDEX(@SplitOn, List2, number+1)-number - 1))) AS ListValue
FROM (
SELECT @SplitOn + @List + @SplitOn AS List2
) AS dt
INNER JOIN Numbers n ON n.Number < LEN(dt.List2)
WHERE SUBSTRING(List2, number, 1) = @SplitOn
) dt2
WHERE ListValue IS NOT NULL AND ListValue!=''
);
GO
을 그것에 가입 :
Create Procedure up_TEST
@Ids VARCHAR(MAX)
AS
SELECT * FROM ATable a
WHERE a.Id IN (SELECT ListValue FROM dbo.FN_ListToTable(',',@Ids))
@TGnat, 멋진 사람, 팁 주셔서 감사합니다! +1 –
+1 - 당신이 취할 수있는 다양한 기술 (CSV 대 테이블 값 매개 변수 대 XML)의 성능 비교를보고 싶다면 필자는 오래 전에 이것을 블로그에 올렸습니다. http://www.adathedev.co.uk /2010/02/sql-server-2008-table-valued-parameters.html – AdaTheDev
@AdaTheDev, 링크를 기반으로 'CREATE TYPE CustomerIDTableType AS TABLE (ID INTEGER PRIMARY KEY)'과 같이 CustomerID에 대한 새 테이블 매개 변수 유형을 만드는 이유는 무엇입니까? ; 당신은 정수형리스트를 넘겨 주는데 이것을 사용한다. –