2011-06-13 204 views
0

我正在爲客戶端重建一個傳統程序...數據庫設計得相對較好唯一我不在乎的就是所有null varchar值... (個人不關心把這個交給我的客戶代碼...)用空字符串替換整個分區的空varchar字段

我試圖用空字符串替換所有的空varchar列...通常我會在我的導入腳本中這樣做,但我不' t需要修改架構,所以我不打算做一個導入腳本...

想知道如果任何華而不實的SQL傢伙/女孩知道一種方式來foreach(db中的varchar列)用null替換null有點事嗎?

我知道必須有一種方法...... P.S. MSSQL 2008r2 DB

+3

NULL意味着 「遺失或不適用。」空串是什麼意思,爲什麼更好? – n8wrl 2011-06-13 20:34:22

+3

另外,如果任何varchar值是FK的,你將不得不向被引用的表中添加'空字符串'。 brrrrr – n8wrl 2011-06-13 20:35:36

+0

@bumble_bee,這是一個糟糕的主意,我建議在輸出的select語句中使用coalesce來解決它。 – Johan 2011-06-13 20:42:49

回答

1

要做到這一點,你可以建立動態SQL語句:

declare @sSQl nvarchar(max)='' 
SELECT 
@[email protected]+'UPDATE ['+TABLE_NAME+ '] SET ['+COLUMN_NAME+']='''''+' WHERE ['+COLUMN_NAME+ '] IS NULL'+CHAR(13) 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE DATA_TYPE LIKE '%CHAR%' 

exec sp_executesql @ssql 
+0

好的解決方案Dalex – ajdams 2012-07-05 23:18:45

3

我個人認爲用空字符串替換null是個壞主意。

可是你自找的,所以這裏是

UPDATE table1 SET field1 = '' WHERE field1 IS NULL 

另一種選擇是要解決它在你的SELECT語句:

SELECT coalesce(field1, '') as field1_excl_nulls FROM table1 

這項工作將與空字符串輸出代替null ,同時仍然將null留在數據庫中。

+1

我認爲這也是答案,但OP正在嘗試一般遍歷所有列。 – 2011-06-13 20:36:16

+0

...在數據庫中的所有表上的所有列。 – 2011-06-13 20:44:16

+0

@所有我在說的事情不需要是空的,其實它只是一個偏好的問題是一致的,我的子句將會是field =''或者field是空的......我' m不是在談論FK的PK,這些都是int not null身份字段。 @kirk Woll yes迭代,如重建所有索引sp_MSforeachtable @ command1 =「print'?' DBCC DBREINDEX('?')「 – 2011-06-13 20:45:08