通过Fabric管道复制至Fabric Warehouse后,架构名称出现意外换行符
问题原因与解决办法
问题根源
- 你用来批量获取架构/表名的CSV文件里,部分名称末尾带有不可见的换行符(
\n或\r\n),Lookup活动读取时直接把这些字符保留了下来 - Fabric Warehouse创建对象时会严格遵循传入的名称字符串,导致实际架构名里包含换行符
- Fabric UI会把这个不可见换行符渲染成↵符号,而SSMS对这类不可见字符做了自动屏蔽处理,所以看不到符号且查询时能自动适配——这只是不同工具对特殊字符的显示/处理逻辑差异,不是架构名本身变了
解决办法
一、修复已创建的带换行符的架构
- 先执行以下SQL确认所有带换行的架构:
SELECT name AS original_schema_name, REPLACE(REPLACE(name, CHAR(10), '<LF>'), CHAR(13), '<CR>') AS name_with_visible_newline FROM sys.schemas WHERE name LIKE '%' + CHAR(10) + '%' OR name LIKE '%' + CHAR(13) + '%';
- 用动态SQL批量重命名这些架构(自动去掉换行符):
DECLARE @old_schema NVARCHAR(128), @new_schema NVARCHAR(128); DECLARE schema_cursor CURSOR FOR SELECT name, REPLACE(REPLACE(name, CHAR(10), ''), CHAR(13), '') FROM sys.schemas WHERE name LIKE '%' + CHAR(10) + '%' OR name LIKE '%' + CHAR(13) + '%'; OPEN schema_cursor; FETCH NEXT FROM schema_cursor INTO @old_schema, @new_schema; WHILE @@FETCH_STATUS = 0 BEGIN EXEC sp_rename @old_schema, @new_schema, 'SCHEMA'; FETCH NEXT FROM schema_cursor INTO @old_schema, @new_schema; END CLOSE schema_cursor; DEALLOCATE schema_cursor;
注:重命名架构后,该架构下的所有表会自动关联到新架构名,无需单独修改表
二、修改管道避免后续再出现问题
- 预处理CSV源文件:用VS Code这类支持显示不可见字符的编辑器打开CSV,开启“显示控制字符”选项,手动删除所有架构名/表名末尾的换行符,保存后重新用于Lookup活动
- 在管道中添加自动清洗逻辑:
- 在Lookup活动之后,添加Set Variable活动,分别创建清洗后的架构名和表名字符串变量:
- 架构名清洗表达式:
@replace(replace(item().schema_name, char(10), ''), char(13), '') - 表名清洗表达式:
@replace(replace(item().table_name, char(10), ''), char(13), '')
- 架构名清洗表达式:
- 在Copy活动的目标配置中,不要直接用Lookup返回的原始字段,而是引用这两个清洗后的变量作为架构名和表名
- 在Lookup活动之后,添加Set Variable活动,分别创建清洗后的架构名和表名字符串变量:
- 验证清洗效果:可以在管道中添加一个临时的Script活动,输出清洗前后的字符串对比,确认换行符已被完全去除
内容的提问来源于stack exchange,提问作者SRP
相关产品推荐
相关产品推荐

