从 SQL 表中删除字符
本文关键字:删除 字符 SQL | 更新日期: 2023-09-27 17:57:05
我有大约 80 个表(每个表有大约 12,000 行和 190 列)
我需要通过删除其中的几个字符来清理数据。(ƒ, € 和 ¢)
这些字符出现在整个数据库中(可以是数据中的任何位置),我需要删除所有这些字符。有什么有效的方法可以做到这一点吗?
我尝试编写一个 C# 应用程序 - 使用数据读取器读取数据,然后检查字符的出现,然后删除它们,最后将数据更新回表。但是,这种方法太耗时了。
我相信有更有效的方法,但这样的东西应该适合你。
我正在使用系统表/视图来获取数据库和列的列表,然后使用动态SQL来构建更新语句。 作为一次性过程,这应该没问题。
------------------------------------------------------------------------------
-- Define find/replace values here
------------------------------------------------------------------------------
IF OBJECT_ID('tempdb..#FindAndReplace') IS NOT NULL DROP TABLE #FindAndReplace
CREATE TABLE dbo.#FindAndReplace(
FindValue VARCHAR(255) PRIMARY KEY,
ReplaceValue VARCHAR(255)
)
INSERT INTO #FindAndReplace SELECT 'ƒ', 'replacement'
INSERT INTO #FindAndReplace SELECT '€', 'goes'
INSERT INTO #FindAndReplace SELECT '¢', 'here'
------------------------------------------------------------------------------
-- Then build and execute replace statements here
------------------------------------------------------------------------------
--loop through all tables
DECLARE @TableName VARCHAR(255)
DECLARE TableCursor CURSOR FOR
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
OPEN TableCursor
FETCH NEXT FROM TableCursor
INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
--then all columns
DECLARE @ColumnName VARCHAR(255)
DECLARE ColumnCursor CURSOR FOR
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName
AND DATA_TYPE IN ('nvarchar', 'varchar')
OPEN ColumnCursor
FETCH NEXT FROM ColumnCursor
INTO @ColumnName
WHILE @@FETCH_STATUS = 0
BEGIN
--then all find-replace values
DECLARE @FindValue VARCHAR(255)
DECLARE @ReplaceValue VARCHAR(255)
DECLARE FindReplaceCusor CURSOR FOR
SELECT FindValue, ReplaceValue
FROM #FindAndReplace
OPEN FindReplaceCusor
FETCH NEXT FROM FindReplaceCusor
INTO @FindValue, @ReplaceValue
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = 'UPDATE [' + @TableName + '] SET [' + @ColumnName + '] = REPLACE([' + @ColumnName + '], ''' + @FindValue + ''', ''' + @ReplaceValue + ''') WHERE [' + @ColumnName + '] LIKE ''%' + @FindValue + '%'''
PRINT @SQL
EXEC sp_executesql @SQL
FETCH NEXT FROM FindReplaceCusor INTO @FindValue, @ReplaceValue
END
CLOSE FindReplaceCusor
DEALLOCATE FindReplaceCusor
FETCH NEXT FROM ColumnCursor INTO @ColumnName
END
CLOSE ColumnCursor
DEALLOCATE ColumnCursor
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
可以调用一些 T-SQL 来执行搜索和替换
从搜索中查看此答案并替换数据库中的部分字符串
UPDATE
Table
SET
Column = Replace(Column, 'find value', 'replacement value')
WHERE
xxx