Teradata插入数据遇6706报错:求批量将Unicode转Latin的通用方法
Teradata批量处理Unicode转Latin解决插入报错6706
当插入数据遇到Failure 6706 The string contains an untranslatable character错误,且目标表列数过多无法手动逐个添加TRANSLATE函数时,可利用Teradata系统视图自动生成批量转换的SQL语句,无需手动编写每一列的转换逻辑:
自动生成带转换逻辑的Insert语句
通过查询DBC.ColumnsV系统视图筛选源表的字符型列,自动拼接包含TRANSLATE(Column USING UNICODE_TO_LATIN)的Insert语句:
SELECT 'INSERT INTO 你的目标库.表B (' || LISTAGG(ColumnName, ', ') WITHIN GROUP (ORDER BY ColumnId) || ') SELECT ' || LISTAGG(CASE WHEN ColumnType IN ('CF', 'CV', 'CLOB', 'VARCHAR', 'CHAR') THEN 'TRANSLATE(' || ColumnName || ' USING UNICODE_TO_LATIN) AS ' || ColumnName ELSE ColumnName END, ', ') WITHIN GROUP (ORDER BY ColumnId) || ' FROM 你的源库.表A;' AS AutoGeneratedInsertSQL FROM DBC.ColumnsV WHERE DatabaseName = '你的源库名' AND TableName = '表A';
说明:
- 替换语句中的
你的源库名、表A、你的目标库、表B为实际对象名称 CASE逻辑会自动区分字符型列和非字符型列,仅对字符列应用转换,数值、日期等类型列直接原样保留WITHIN GROUP (ORDER BY ColumnId)保证列顺序与原表一致,避免插入时列顺序不匹配的问题- 执行该查询后,将返回的结果作为SQL语句执行即可完成批量转换插入
内容的提问来源于stack exchange,提问作者Debasis
相关产品推荐
相关产品推荐

