2009-12-03 149 views
0

更換所有的空間出現在一個表中我如何寫一個SQL查詢來代替空間所有出現下劃線的表,而無需編寫單獨的語句爲每列?SQL查詢以下劃線

+0

只需要做它在一毫秒的存取如果VBA代碼可以做到這一點它會適合我的選擇。請注意,該數據庫是在訪問約4十萬條記錄 – silverkid 2009-12-03 11:10:54

回答

3

UPDATE [表名] SET [FIELD_NAME] =替換([FIELD_NAME], ' ' '_'),[欄位2] =替換([欄位2],'', '_')

然而,這樣,你還是要每列總而言之,上面的回答可能更適合您的需要

+0

+1 400K行應該不會構成太大的問題。我不知道他想要t o如果有> 1個連續空間的值,請執行操作? – 2009-12-03 11:25:56

+0

什麼單引號? – Fionnuala 2009-12-03 11:35:38

0

您可以使用和VBA的混合物SQL:

Dim rs As DAO.Recordset 
Dim db As Database 

Set db = CurrentDb 

Set rs = db.OpenRecordset("SELECT * FROM TheTable") 

For i = 0 To rs.Fields.Count - 1 
    ''You may wish to check dbMemo as well as dbText 
    If rs.Fields(i).Type = dbText Then 
     ''You have to watch out for single quotes as well as spaces 
     s = "UPDATE TheTable SET [" & rs.Fields(i).Name & "] = " _ 
     & "Replace(Replace([" & rs.Fields(i).Name & "],""''"",""'""),"" "",""_"") " _ 
     & "WHERE Instr([" & rs.Fields(i).Name & "],"" "")>0 " _ 
     & "AND [" & rs.Fields(i).Name & "] Is Not Null" 
     db.Execute s, dbFailOnError 
     Debug.Print db.RecordsAffected 
    End If 
Next 
+2

其實,這混合物包括Access對象模型太微妙但卻是事實。 Access數據庫引擎SQL缺少Replace()函數,並且必須由Access對象模型提供。如果您嘗試從Access UI外部執行此操作,那麼您的SQL將因語法錯誤而失敗。 – onedaywhen 2009-12-04 09:00:46

1

有時候,你並不需要一個錘子(代碼)即使問題看起來像釘子。

如果這是一個一次性的任務,該表是不超過幾百萬行,你可以打開表,並做了查找和從訪問編輯菜單(或Ctrl-H)取代了。

alt text

這是訪問的那些方便的數據處理能力,使得它這麼混賬的臨時數據庫的工作有用的。

注意事項:
(1)性能將不會對大表很大,但在中等大小的表非常適用於一次性的數據清除任務(或當你願意等待幾分鐘吧(2)這種技術創建的鎖具有一定的壓迫性,所以對於大量用戶主動使用的數據庫,建議不要這樣做。

+0

使用查找和替換移動通過數據,這將是數量級比使用SQL UPDATE語句慢的順序一行接一行。 -1的建議,除了幾千行或更少的表格外,其他任何東西都不可行。 – 2009-12-05 00:59:40

+0

該OP明確指出,他只有幾千行,我的回答特別包括免責聲明,它只是用於較小的表格。大衛,你還想要什麼? – JohnFx 2009-12-05 01:08:12

+0

另外,如果是一次性的(我也提到了),那麼性能可能不是一個大問題。我已經在具有數百萬行的表上完成了這項工作。不過,我會再加一個警告,這個在桌子上的鎖定非常殘酷,所以我會避免在有很多其他用戶的情況下。儘管如此,它在數據分析類型項目中的作用非常好。 – JohnFx 2009-12-05 01:09:53