2014-09-17 2 views
0

SQL에서 분할 함수의 결과를 사용하는 방법을 찾지 못했습니다. 그것은 테이블을 반환하고 "반환"각 반환 데이터를 선택하는 "foreach"와 같은 기능을 수행하는 방법을 모르겠다.분할 SQL 서버 2008 및 삭제

ALTER FUNCTION [dbo].[Split] (@separator char(1), @value varchar(512)) 
RETURNS table 
AS 
RETURN (
    WITH Pieces(pn, start, stop) AS (
     SELECT 1, 1, CHARINDEX(@separator, @value) 
     UNION ALL 
     SELECT pn + 1, stop + 1, CHARINDEX(@separator, @value, stop + 1) 
     FROM Pieces 
     WHERE stop > 0 
    ) 
    SELECT pn AS Id, 
     SUBSTRING(@value, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS Data 
    FROM Pieces 
) 

는 반환이 :

DELETE FROM myTable 
    WHERE OneColumnInMyTable = @OneColumnInMyTable AND @ImportantValue = @Data 

@Data 각에 해당합니다

@separator = ',' 
@value = '13,14,15' 

Id Data 
1 13 
2 14 
3 15 

그럼 내가 그런 일을 할

는 분할 기능을 보면 value 분할의 리턴에있는 데이터.
foreach(Data in ReturnOfMySplitFunction) 
    { 
      DELETE FROM myTable 
      WHERE OneColumnInMyTable = @OneColumnInMyTable AND @ImportantValue = Data 
    } 

당신에게 그렇게 할 수있는 몇 가지 아이디어를 가지고 :

목적은하는 것입니다? 그것은 SQL 서버의 동안 가능한가요? 감사합니다

+1

내 대답을 확인하십시오 ... –

답변

1

스플릿 기능을 사용하면 다음과 같이 할 수 있습니다. 여기

DELETE 
FROM myTable 
WHERE OneColumnInMyTable = @OneColumnInMyTable 
    AND @ImportantValue IN (
     SELECT Data 
     FROM dbo.Split(',', @Data) 
     ) 

난 당신의 @Data이 같은 값을 포함 가정 - @Data = '11, 12, 14, 15'

+0

고마워요! 그것은 완벽하게 작동합니다! – Julien698

0

아래와 같은 스크립트를 시도해보십시오

: 누군가가 같은 일을하고자하는 경우 내 코드를 삽입
Delete A 
FROM MYTABLE A 
JOIN DBO.Split(@separator, @value) B ON [email protected] AND @ImportantValue = B.DATA 
Where A.OneColumnInMyTable = @OneColumnInMyTable 
0

DECLARE @categories varchar(512), 
     @GroupingId int, 
     @Separator char 

SET @Separator = ',' 
SET @categories = '12,24,33' 
SET @GroupingId = '69241' 

DELETE FROM RefAssoThematic 
WHERE GroupingId = @GroupingId 
AND ThematicId IN (SELECT Data FROM 
dbo.split(@Separator,@Categories))