从数据库中查找或删除无效字符

时间:2013-05-23 13:21:25

标签: sql unicode sql-server-2008-r2

我们正在使用前端软件允许输入无效字符的数据库。 (我无法控制或重写该软件。)

字符的类型是回车,换行符, ,¶,基本上任何不是0-9,a-z或标准标点符号的东西都会导致我们对数据库的问题以及我们如何使用数据。

我正在寻找一种方法来扫描整个数据库以识别这些无效代码,并将它们显示为结果或将其删除?

我一直在看This site想知道是否有搜索特定范围的方法?但我可能会咆哮错误的树。

我对SQL很陌生,所以对我很温柔,谢谢。

2 个答案:

答案 0 :(得分:0)

我能想到的唯一方法是编写一个存储过程,该过程使用系统表来获取相关数据库/模式中所有字段的列表。让它排除系统表(或仅包括用户定义的表),然后根据系统表查询中的列/表动态写出SQL更新语句。使用正则表达式或字符删除,如this article

有问题的系统表是:

SELECT
 table_name,column_name
FROM
 information_schema.columns

Psudo代码将是:

Get list of tables we want to do this for
For each table in list
get list of columns for table that have string data.
For each column in table
generate update statement to strip unwanted characters
--Consider writing out table, column key, before after values to history table. incase this 
has to be undone.
--Consider counter so I have an idea of what was updated
execute updatestatement
next column
next table
write out counter

答案 1 :(得分:0)

既然你说

  

然后数据移动到第二个无法处理这些数据的程序   字符和这会导致进程失败。

我想知道您是否可以将不可读的数据保留在原来的位置,并为仅在第二个进程失败时填充的已更改数据创建新列。您仍然需要测试失败单元格中数据的每个字符,但您不必测试每一行中的每个字符。确定要处理的更新文本后,可以使用更新后的值再次调用第二个进程。

相关问题