2009-12-03 68 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