2012-10-18 28 views
3

是否有一種快速方法可以將表中的所有字段更改爲空,以僅填充空字段。我有很多列,所以想知道是否有辦法通過表而不是按列來完成。在表中將所有列設置爲`null`

我需要這樣的東西

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

,但顯然這是不正確的語法

+0

你能告訴我們你的方案爲好,即是什麼欄目?或者粗略地說:你有10列還是100列?這可能會影響應該選擇哪種解決方案。 – jsalonen

+0

更像100。 – user1296762

+0

我得問清楚:你爲什麼有那麼多列?通常當你有很多列時,它表明你的模式有問題。如果是這種情況,您應該修復模式問題。 – jsalonen

回答

4

此代碼將生成更新語句列表中,你必須只運行它:

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 

Here (sql fiddle)你可以看到它是如何工作的。

+1

但是它會爲每一列運行一個更新。換句話說,如果表格有20列,它將通過表格20次(!!)更新。 – Gidil

+1

當然是錯的? – Parado

+1

OP在評論中表示他需要更新更多! – Gidil

0

如果你想生成一個腳本,將更新所有包含空值到空白可爲空字段,你可以使用以下代碼:

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

雖然我有很多領域。我不想一個接一個去做 – user1296762

+0

更新了答案。您可以根據需要添加任意數量的字段。希望這可以幫助。 – Gidil

+1

我認爲這是唯一的方法。這將需要很長時間,這就是爲什麼我想要一個快速解決方案來做整個表 – user1296762

0

試試這個請

update table1 set columnnames='' where columnnames ='null' 
+0

雖然我有很多領域。我不想一個接一個的去做 – user1296762

+0

如果你有很多字段給出字段名後用逗號隔開 – SRIRAM

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) 
相關問題