2010-12-13 9 views

答えて

2
をたくさん空の文字列値が含まれています

これはテーブルに基づいて簡単に行う方法です。テーブル名をprocに渡すだけです。思考テーブル名をループさせる姉妹procを作成し、whileループ内でこのprocを呼び出して、ループロジックの各テーブルを処理することもできます。

CREATE PROC setNullFields 
(@TableName NVARCHAR(100))   
AS  

CREATE TABLE #FieldNames  
( 
pk INT IDENTITY(1, 1) ,  
Field NVARCHAR(1000) NULL  
);  

INSERT INTO #FieldNames  
SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName 

DECLARE @maxPK INT;  
SELECT @maxPK = MAX(PK) FROM #FieldNames  

DECLARE @pk INT;  
SET @pk = 1  

DECLARE @dynSQL NVARCHAR(1000) 

WHILE @pk <= @maxPK  
BEGIN  

DECLARE @CurrFieldName NVARCHAR(100);  
SET @CurrFieldName = (SELECT Field FROM #FieldNames WHERE PK = @pk)  

    -- update the field to null here: 

    SET @dynSQL = 'UPDATE ' + @TableName + ' SET ' + @CurrFieldName + ' = NULLIF('+ @CurrFieldName+ ', '''')' 
    EXEC (@dynSQL) 

SELECT @pk = @pk + 1  
END  
+0

それは非常に良いですが、私は 'ID'というID列を持っている場合、 "ID列 'ID'を更新できません"というエラーが発生します。 –

3
UPDATE mytable 
    SET col1 = NULLIF(col1, ''), 
     col2 = NULLIF(col2, ''), 
     ... 
+0

私はおそらく、あなたがこれを適用し、オンザフライでSQLを生成するために列を把握するためにINFORMATION_SCHEMAを使用することができ、多くのテーブル –

+0

にそれをappllyしたいように、書き込み列名なしでそれを作るために他の方法です。 –

関連する問題