2013-10-25 6 views
0

MS SQL Server 2008을 사용하고 있는데 테이블 중 하나에서 긴 이름 목록을 업데이트해야합니다. 이름 목록을 전달하고 접두어를 추가하여 이름을 업데이트하고 싶습니다. 저장 프로 시저에 X, Y, Z를 전달하면 Disable_X, Disable_Y, Disable_Z로 업데이트됩니다.한 번의 통화로 여러 레코드 업데이트

테이블 값 매개 변수는 내가 찾고있는 것 같아요. http://www.sommarskog.se/arrays-in-sql-2008.html#TVP_in_TSQL을 읽었지만 매개 변수를 여러 개 삽입하는 것에 대해서만 이야기하고, 내가하려는 것은 여러 레코드가 있으면 업데이트하는 것입니다. 나는이 개념을 배우기 시작 했으므로 다른 누군가가 올바른 방향으로 나를 가리킬 수 있습니까?

편집 : 저장 프로 시저로 업데이트하려는 이름 목록을 전달하고 싶습니다. 저장 프로 시저를 여러 번 호출하는 대신, 한 번만 호출하려고합니다.

+1

원하는 것은 분명하지 않습니다. 테이블을 업데이트하기 위해 호출 할 수있는 문자열 (?) 또는 테이블 (?) 매개 변수가있는 저장 프로 시저가 필요합니까? 아니면 간단한'업데이트 ... 어디서 ...'충분합니까? –

+0

@OcasoProtal 충분히 명확하지 않은 것에 대해 죄송합니다. 업데이트하려는 이름 목록이있는 저장 프로 시저를 호출하고 싶습니다. 이 목록은 TVP 또는 쉼표로 구분 된 목록 또는 다른 방법으로 전달 될 수 있습니다. 간단한 업데이 트가 있다면, 그 조합은 트릭을 할 수있는 곳도 괜찮아. – user2696565

답변

0

이 저장 프로 시저에는 쉼표로 구분 된 이름으로 구성된 문자열이 필요합니다. 이 문자열을 xml로 변환하고 xml functionallity를 사용하여 xml의 모든 요소 목록을 가져옵니다. 테스트되지 않음 :

CREATE PROCEDURE [dbo].[MultiUpdate] 
( 
    @valuelist varchar(MAX) 
) AS 

    DECLARE @xml as xml 

    SET @xml = cast(('<X>'+replace(@valuelist,',' ,'</X><X>')+'</X>') as xml) 

    UPDATE yourtable SET name='DISABLE_'+name Where name in (SELECT N.value('.', 'varchar(10)') as value FROM @xml.nodes('X') as T(N)) 

    RETURN 
관련 문제