2009-03-13 4 views

답변

0

답변 해 주셔서 감사합니다. 그 아이디어를 다음 SQL 문을 작성하는 데 사용했습니다. 우리는 모두 동일한 유형의 데이터 (직원 ID)를 가지고 있지만 그 필드 이름은 다를 수있는 많은 테이블 50+을 가지고 있습니다. 따라서 테이블 이름에 따라 업데이트 할 필드가 달라집니다. 내 실제 WHERE 및 SET 문은이 예제보다 복잡하지만이 문제에는 중요하지 않습니다.

먼저 업데이트 할 테이블/필드를 저장할 임시 테이블을 만듭니다.

그런 다음이 레코드를 반복하여 SQL을 생성합니다. 동적 SQL이 마음에 들지 않는 사용자는 print 문을 사용하여 다른 쿼리 창에 붙여넣고 실행할 수 있습니다. 또는 EXEC 문을 호출 할 수 있습니다.

답변을 수락하고 싶지만 그다지 완전히 설명하지 않았기 때문에 제 질문에 대답하지 않았습니다. 어느 쪽이든, 도와 줘서 고마워.

DECLARE @TableFieldDictionary TABLE 
(
    tablename VARCHAR(100), 
    fieldname varchar(100) 
) 

insert into @TableFieldDictionary(tablename,fieldname) values ('table1','field1'); 
insert into @TableFieldDictionary(tablename,fieldname) values ('table2','field2'); 
--put more insert statements here. In my case, I have 50 inserts 


declare cursor_dictionary cursor 
for select tablename, fieldname from @TableFieldDictionary 

open cursor_dictionary 

declare @looptablename VARCHAR(100) 
declare @loopfieldname varchar(100) 

fetch next from cursor_dictionary 
into @looptablename,@loopfieldname 

DECLARE @UpdateSql AS varchar(max) 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @UpdateSql = 'UPDATE ' + @looptablename + 
        ' SET ' + @loopfieldname + ' = 123' + 
      ' WHERE ' + @loopfieldname + ' = 456' 

    print @updatesql 
    --EXEC(@updatesql) 

    fetch next from cursor_dictionary 
    into @looptablename,@loopfieldname 
END 

CLOSE cursor_dictionary 
DEALLOCATE cursor_dictionary 
2

는이 동적 SQL을 사용해야합니다. EXEC 함수는 문자열로 전달 된 ad-hoc sql 문을 실행합니다.

DECLARE @UpdateSql AS varchar(2000) 

foreach @tablename in ArrayOfTablesObjects 

SET @UpdateSql = 'UPDATE ' + @tablename + ' SET ' + @fieldname ' + = ''xyz'' WHERE ' + @fieldname + ' = ''123''' 
EXEC (@UpdateSql) 

end foreach 
+0

* 웃음 * 경주가 신속한 것으로 나타납니다 (타이피스트). – MarkusQ

+0

실제로 랩톱을 탐색 할 때 이걸 보았 기 때문에 로그인 한 곳에서 건너 뛰었습니다 (열린 ID를 모르겠습니다). – harpo

2

이 작업은 동적 SQL을 사용해야 만 수행 할 수 있습니다. 이는 사용하기에 매우 위험한 기술이며 데이터베이스를 손상시킬 수있는 방법과 데이터베이스를보다 신중하게 작성하여 데이터베이스를 보호 할 수있는 방법에 대해 많은 고려를하지 않고서는 절대 수행하지 않아야합니다. 동적 SQL 작성을 고려하기 전에이 기사를 읽으십시오. http://www.sommarskog.se/dynamic_sql.html

관련 문제