'', hexadecimal value 0x0F, is an invalid character.
This was down to some dodgy legacy database data that contained ascii control characters (0 - 31). I wrote this SQL script to remove all ascii chars 0 - 31 from all character columns in a table:I used this T-SQL Beautifier to make the SQL look nice
Use at your own risk!
DECLARE @table varchar(50)
SET @table = 'MyTable'
SET NOCOUNT ON
DECLARE @column varchar(50)
DECLARE column_cursor CURSOR FOR
SELECT column_name
FROM information_schema.columns
WHERE table_name = @table
AND data_type LIKE '%char'
OPEN column_cursor
FETCH NEXT FROM column_cursor INTO @column
WHILE @@FETCH_STATUS = 0 BEGIN
DECLARE @charCode int
SET @charCode = 0
WHILE @charCode < 32 BEGIN
DECLARE @sql varchar(max)
SET @sql = 'UPDATE ' + @table + ' SET ' + @column +
' = REPLACE(' + @column + ', char(' + CAST(@charCode AS varchar) + '), '''')' +
' WHERE ' + @column + ' LIKE ''%'' + char(' + CAST(@charCode AS varchar) + ') + ''%'''
--PRINT @sql
DECLARE @rowcount int
EXEC(@sql)
SET @rowcount = @@rowcount
IF @rowcount > 0
PRINT 'char ' + CAST(@charCode AS varchar) + ' replaced ' +
CAST(@rowcount AS varchar) + ' times in column ' + @column
SET @charCode = @charCode + 1
END
FETCH NEXT FROM column_cursor INTO @column
END
CLOSE column_cursor
DEALLOCATE column_cursor
SET NOCOUNT OFF
0 comments:
Post a Comment