2011-05-02 3 views
0

[ISD_ID] 속성의 다른 테이블에서 선택 항목을 업데이트해야합니다. 어떻게해야합니까? 업데이트, 내가 통해 반복하고 싶습니다 테이블 이름의 세트가 이제여러 테이블에 레코드 속성 업데이트

SELECT c1.TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS c1 
INNER JOIN information_schema.COLUMNS c2 
ON c1.TABLE_NAME = c2.TABLE_NAME 
WHERE c1.COLUMN_NAME LIKE '%isd%id%' and c2.column_name LIKE '%schooldistrict%id%' 

:

나는 내가이 문을 찾고 기록을 가지고 테이블 세트를 잡을 수 있습니다 필요에 따라 기록하십시오.

다른 게시물의 제안에 따라 동적 SQL을 읽었습니다. 그래서 나는 EXECUTE IMMEDIATE: ('update' + @tablename + ' set ISD_ID=37 where SchoolDistrictID=46')과 같은 것을 할 수 있습니다.

내 질문에 대답 : 어떻게 내 테이블 이름을 반복하고 위의 문을 @tablename 변수로 대체하여 각 테이블의 값을 업데이트 할 수 있습니까?

필요한 경우 .NET 및 SSIS를 사용할 수있는 기능이 있습니다.

미리 감사드립니다. 나는 SQL에 익숙하지 않고 배우는 기회를 주셔서 감사합니다. 당신은 문서화되지 않은 저장 프로 시저를 사용할 수 있습니다

답변

0
  • 이상한 방법 something like this을 할, (레무스 Rusanu 말하지 마세요 내가 말했다). @where 조건을 사용하여 테이블에 주어진 열이 포함되도록 지정합니다.

  • 더 종래의 방법은 임시 테이블 또는 변수 테이블에 조회 결과를 선택

    1. 하는 것
    2. 임시 테이블/테이블 변수 위에
    3. 대하여 반복, while 루프를 이용하여 잡아 테이블의 이름과 @tablename 변수로 대체
    4. 위의 쿼리를 실행하십시오. 경고, 아마도 @myDynamicSQL과 같은 변수를 만들고, 명령문 텍스트를 설정 한 다음, EXEC IMMEDIATE를 호출하고 싶을 것입니다.

은 솔직히, 당신이 "이상한 방법"으로 수행하는 시간으로, 당신은 그것을 기존의 방법을하는 것이 더 싶지만, 난 그냥 철저히하기 위해 노력하고있어.

+0

, 나는 ** ** 설정 @tablename 줄에서 ** ** 스칼라 변수를 선언해야합니다 오류 : '표 ( Table_nm NVARCHAR (128) NULL ) AS @MyTable 선언 DECLARE의 @tablename = '업데이트'TEXT AS NVARCHAR (128) DECLARE의 @myDynamicSQL AS + @tablename + '로 설정 ISD_ID = SchoolDistrictID = 46 37' WHILE은 (@MyTable FROM Table_nm 을 선택)이 NULL이 아닌 BEGIN SET @tablename = [오류가 발생했습니다 ->] @ MyTable.Table_nm EXECUTE IMMEDIATE @myDynamicSQL 계속 끝 GO' – ElderJedi

+0

@ SebastianVal - 변수에서 Table_nm을 가져와야합니다. 그래서, 이와 같은 것은 작동 할 것입니다 :'SELECT TOP 1 @ tablename = table_nm from @ myTable'. 이제는 @mytable에서 레코드를 삭제할 때주의해야합니다. 또는 카운터를 사용하여 무한 루프를 방지하십시오. – dawebber

0

SSIS를 사용하려면 첫 번째 쿼리의 결과를 RecordSet 대상으로 가져올 수 있습니다.

그런 다음 레코드 집합을 유지하는 변수에 foreach 루프를 만들 수 있습니다. 예를 들어 "UPDATE " + (DT_STR,255,1252)@[User::tblname] + " SET ....."을 sqlStatementSource로 사용하는 식으로 SQL 작업을 만들 수 있습니다.내가 실행할 때 귀하의 제안에 따라

+0

(여기서 User :: tblname은 tablename 인 레코드 세트 열에 대한 현재 값을 보유하는 변수입니다.) – cairnz

+0

응답 해 주셔서 감사합니다. 이것은 그것을하는 가장 간단한 방법처럼 보이지만, 나는 새로운 SQL을 배우는 것을 시도 할 것입니다. – ElderJedi

+0

그러면 쿼리에서 커서를 사용하여 쉽게 수행 할 수 있고 SQL을 동적으로 실행할 수 있습니다. – cairnz

관련 문제