비슷한 상황이 생겨서 올바른 방향으로 나를 가리킬 수 있는지 궁금합니다. 누군가 NULL 값을 'NULL'이라는 단어가 들어있는 텍스트 문자열로 바꿔 놓음에 따라 실망 스럽습니다. 제거해야하는 단어입니다.SSIS 여러 Unknow 열 업데이트
필자는 250 개 이상의 열과 각각 100 만 개가 넘는 6 개의 상당히 큰 테이블을 가지고 있으며 NULL이라는 단어가있는 행을 업데이트하고 적절한 NULL 값으로 바꾸는 것이 필요합니다. 이것이 어떤 열에 나타나는지 나는 모른다.
처음에는 모든 열을 값의 개수와 예상보다 적은 수로 표시하는 코드가 있는데, 열이 포함되어 있는지 확인하기 위해 SQL 쿼리를 실행합니다. 문자열 'NULL'및 다음 코드를 사용하여 NULL로 바꿉니다. 내가 SSIS로하려고하고있어 각 열을 반복하는 것입니다
declare @tablename sysname
declare @ColName nvarchar(500)
declare @sql nvarchar(1000)
declare @sqlUpdate nvarchar(1000)
declare @ParmDefinition nvarchar(1000)
set @tablename = N'Table_Name'
Set @ColName = N'Column_Name'
set @ParmDefinition = N'@ColName nvarchar OUTPUT';
set @sql= 'Select ' + @ColName + ', Count(' + @ColName + ') from ' + @tablename + ' group by ' + @ColName + ''
Set @sqlUpdate = 'Update ' + @tablename + ' SET ' + @ColName + ' = NULL WHERE '+ @ColName + ' = ''NULL'''
print @sql
print @sqlUpdate
EXECUTE sp_executesql @sql, @ParmDefinition, @[email protected] OUTPUT;
EXECUTE sp_executesql @sqlUpdate, @ParmDefinition, @[email protected] OUTPUT;
는
Select Column_Name from Table_Name where Column_Name = 'NULL'
해당 쿼리를 실행하고 업데이트를 수행합니다.
지금까지 나는 Information.Schema에서 열 이름을 추출하고 해당 테이블의 레코드 개수를 얻을 수 있지만 (sqlUpdate, 위와 같이) 실제 UPDATE 문 을 실행에 관해서 수 있습니다 - '가 아무튼 쿼리의 동적 표현에 만족하는 구성 요소 인 것 같습니다.
는 어디서 기록 (잘못 될 수 있음)이있는 경우 이동하는 결정하기 위해 조건부 분할을 사용하고 있는데 나는 업데이트 OLE DB 명령을 시도했습니다.요약하면 SSIS가이 작업에 가장 적합한 도구인지 또는 내가 잘못된 장소를 찾고 있는지 궁금합니다.
SSIS 2005를 사용하고 있는데, 아직 잘 모르지만 제한이있을 수 있습니다.
모든 안내를 받으실 수 있습니다.
감사합니다,
존
그래, 일반적으로 업데이트가 어쨌든 전체 스캔을 수행 할 것이기 때문에 카운트를 확인하면 테이블 및/또는 인덱스 스캔의 양이 두 배가됩니다 ... –