【发布时间】:2013-08-26 12:12:12
【问题描述】:
我想知道在此之前是否有人遇到过类似的情况,可以为我指明正确的方向..?我要补充一点,这有点令人沮丧,因为有人用包含单词“NULL”的文本字符串替换了 NULL 值 - 我需要删除它。
我有 6 个相当大的表,超过 250 多个列,每个表中超过 100 万条记录,我需要更新 NULL 单词连续出现的列,并将其替换为适当的 NULL 值 - 问题是我不知道它出现在哪一列。
首先,我有一些代码会列出每一列的值的计数以及任何看起来比预期的计数低的内容,我将运行 SQL 查询以确定该列是否包含字符串 'NULL' 并使用以下代码,将其替换为 NULL。
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, @ColName=@ColName OUTPUT;
EXECUTE sp_executesql @sqlUpdate, @ParmDefinition, @ColName=@ColName OUTPUT;
我尝试使用 SSIS 是遍历每一列,
Select Column_Name from Table_Name where Column_Name = 'NULL'
运行适当的查询,并执行更新。
到目前为止,我可以从 Information.Schema 中提取列名并从相应的表中获取记录数,但是在运行实际的 UPDATE 语句时 (如上,sqlUpdate ) - 似乎没有一个组件对查询的动态措辞感到满意。
我正在使用 条件拆分 来确定如果有记录(可能不正确)去哪里,并且我已尝试 OLE DB 命令 进行更新.
简而言之,我想知道 SSIS 是否是这项工作的最佳工具,还是我找错地方了!
我使用的是 SSIS 2005,它可能有一些我还不知道的限制!
任何指导将不胜感激。
谢谢,
乔恩
【问题讨论】:
标签: sql sql-server sql-server-2005 ssis