4

null のテーブル内のすべてのフィールドを空のフィールドだけに変更する簡単な方法はありますか。私は多くの列を持っているので、列ごとではなくテーブルごとにそれを行う方法があるかどうか疑問に思いました。

次のようなものが必要です

update table 1 
set * = '' 
where * is null

しかし明らかにこれは間違った構文です

4

4 に答える 4

6

このコードは更新ステートメントのリストを生成します。実行するだけで済みます。

SELECT  'update '+ so.name+' set '+sc.name+'= '''' where '+sc.name+' is null '   
FROM sysobjects so
JOIN syscolumns sc ON so.id = sc.id
JOIN systypes st ON sc.xtype=st.xtype  
where so.type = 'U'
and st.name in('varchar','char')
--and so.name = 'tab' <--- if you need update only one table

ここ (sql fiddle)で、その仕組みを確認できます。

于 2012-10-18T12:33:45.940 に答える
0

次のようなことを試してください:

UPDATE TABLE1 
   SET ( COL1, COL2, COL3, COL4 ) = (SELECT COL1A, 
                                            COL2A, 
                                            COL3A, 
                                            COL4A 
                                       FROM TABLE2 
                                      WHERE COL5A = TABLE1.COL5) 
 WHERE COL5 IN (SELECT COL5A 
                  FROM TABLE2) 
于 2012-10-18T12:35:50.697 に答える
0

NULL を含むすべての NULLable フィールドを空白に更新するスクリプトを生成する場合は、次のコードを使用できます。

DECLARE @TAB VARCHAR(1000) = 'ProductVendor', 
        @COL VARCHAR(1000), 
        @SQL VARCHAR(MAX) 
DECLARE UPDATE_CURSOR CURSOR LOCAL FAST_FORWARD FOR 
  SELECT t2.NAME 
    FROM (SELECT * 
            FROM SYSOBJECTS 
           WHERE XTYPE = 'u' 
                 AND NAME = @TAB)T1 
         INNER JOIN SYSCOLUMNS t2 
                 ON T1.ID = t2.ID 
   WHERE t2.ISNULLABLE = 1 

OPEN UPDATE_CURSOR 

SET @SQL = 'UPDATE ' + @TAB + ' SET ' 

FETCH NEXT FROM UPDATE_CURSOR INTO @COL 

WHILE @@FETCH_STATUS = 0 
  BEGIN 
      SET @SQL = @SQL + @COL + ' = Isnull(' + @COL + ', ''''),' 

      FETCH NEXT FROM UPDATE_CURSOR INTO @COL 
  END 

CLOSE UPDATE_CURSOR 

DEALLOCATE UPDATE_CURSOR 

SET @SQL = LEFT(@SQL, Len(@SQL) - 1) 

EXEC (@SQL) 

必要なのは、最初のテーブル名 (TAB 変数) を変更することだけです。このスクリプトは、1 回の実行ですべての列を更新する単一のクエリを生成します。

于 2012-10-18T12:24:37.347 に答える
-2

これを試してください

 update table1 set columnnames='' where columnnames ='null'
于 2012-10-18T12:24:54.393 に答える