0

NULL各フィールドの不要な値をすべて置き換える update ステートメントを作成する必要があります。この更新ステートメントを使用しています。

UPDATE TableName
SET    ColumnName = replace(ColumnName, 'what to replace', NULL)
WHERE  ColumnName = 'what to replace'
GO

INFORMATION_SCHEMA.COLUMNSデータを取得し、変数を一度に各列名に変更する変数を作成し、すべての列で UPDATE ステートメントを実行して、不要な文字を に置き換える必要がありNULLます。

4

1 に答える 1

1

便利なカーソルを使用してこれを行うことができます(SQLサーバーを想定):

DECLARE @Iterator varchar(55)
DECLARE @strSQL varchar(8000) -- for dynamic sql set then exec variable
DECLARE xyz CURSOR
FOR
--Select stuff to iterate over
SELECT c.name ColumnName
FROM sys.columns c INNER JOIN
     sys.tables t ON c.object_id = t.object_id INNER JOIN
     sys.schemas s ON t.schema_id = s.schema_id
WHERE t.name = 'table'   
OPEN xyz     
FETCH NEXT FROM xyz 
INTO @Iterator    
WHILE @@FETCH_STATUS = 0
BEGIN   
--Do stuff
SET @strSQL = '
            UPDATE TableName
            SET    '+@Iterator+' = NULL
            WHERE  '+@Iterator+' = ''junk''
            GO'
PRINT (@strSQL)    
    FETCH NEXT FROM xyz 
    INTO @Iterator     
END  
CLOSE xyz 
DEALLOCATE xyz 
GO

この更新を実際に実行するには、PRINT(@strSQL) を EXEC(@strSQL) に変更し、最初に PRINT を実行して、ステートメントが希望どおりに読み取られるようにします。

更新: すべてのテーブル/列をループするには、これですべてのテーブルのカーソルを出力できますが、外側のカーソルを実行することはできません。

DECLARE @Iterator varchar(55)
DECLARE @strSQL varchar(8000) -- for dynamic sql set then exec variable     
DECLARE xyz CURSOR
FOR
--Select stuff to iterate over
SELECT DISTINCT t.name TableName
FROM sys.tables t INNER JOIN
     sys.schemas s ON t.schema_id = s.schema_id
OPEN xyz    
FETCH NEXT FROM xyz 
INTO @Iterator    
WHILE @@FETCH_STATUS = 0
BEGIN       
--Do stuff
SET @strSQL = 'DECLARE @Iterator varchar(55)
                DECLARE @strSQL varchar(8000) -- for dynamic sql set then exec variable
                DECLARE xyz CURSOR
                FOR
                --Select stuff to iterate over
                SELECT c.name ColumnName
                FROM sys.columns c INNER JOIN
                     sys.tables t ON c.object_id = t.object_id INNER JOIN
                     sys.schemas s ON t.schema_id = s.schema_id
                WHERE t.name = '''+@Iterator+'''   
                OPEN xyz     
                FETCH NEXT FROM xyz 
                INTO @Iterator    
                WHILE @@FETCH_STATUS = 0
                BEGIN   
                --Do stuff
                SET @strSQL = ''
                            UPDATE '+@Iterator+'
                            SET    ''+@Iterator+'' = NULL
                            WHERE  ''+@Iterator+'' = ''''junk''''
                            GO''
                PRINT (@strSQL)    
                    FETCH NEXT FROM xyz 
                    INTO @Iterator     
                END  
                CLOSE xyz 
                DEALLOCATE xyz 
                GO
'   
PRINT (@strSQL)   
    FETCH NEXT FROM xyz 
    INTO @Iterator     
END    
CLOSE xyz 
DEALLOCATE xyz 
GO
于 2013-06-03T22:26:20.643 に答える