【发布时间】:2011-12-07 02:32:08
【问题描述】:
我正在使用一个 SSIS 包,它从 SQL Server 获取数据并创建文本文件以发送给供应商。目前正在使用 ANSI 1252 对文件进行编码,并且未在平面文件连接管理器上选中 Unicode 复选框。
遇到此符号时包失败:♥
这让我相信,如果该步骤试图写出任何非 ascii 字符,它将失败。但是,它将成功处理:“ş”,方法是将其转换为标准“s”。就我们的目的而言,这种行为很好,如果它做了类似于心形符号的事情,就不会有问题。我试图避免发送 Unicode 文件,因为该文件已经非常大,将其大小翻倍并不可取。
我正在寻找的是 SSIS 不会自动为我转换的 unicode 字符范围。然后我需要做的是替换原始 SQL 语句,以清除那些像♥这样的字符。
我们从 REPLACE(NAME, SUBSTRING(NAME, PATINDEX('%[^ -ÿ]%', NAME COLLATE Latin1_General_BIN2), 1), '') 开始,但这会将“ş”替换为空格,我们试图避免这种情况,因为 SSIS 可以很好地处理“ş”。
感谢您阅读此问题!
【问题讨论】:
-
你在做什么将数据类型更改为 ANSI?据我所知,SSIS 不进行隐式转换。您是否在数据库数据源和文件数据源之间转换数据类型?
-
我有一个 OLE DB 源查询包含我正在使用的 nvarchar 列的表。我没有使用任何数据转换任务,它实际上是一个直接的 OLE DB 到平面文件的转换。
-
数据流看起来像一个查询,一些操作,然后写入一个平面文件。源数据在 sql server 中是 unicode,它以 wstr (?) 的形式进入管道 您是在数据流中显式转换为 str (1252),还是在写入文件时让该转换隐式发生?
-
数据作为 DT_WSTR 进入平面文件目标,我没有进行任何显式转换。也许一种方法是尝试使用 DataConversion 任务对其进行转换,并将失败的记录发送到单独的 Unicode 文件...
-
一开始我可能会这样处理这个问题。然后,您可以在遇到不同的错误条件时添加对它们的处理。我很惊讶所有行都没有因为数据类型不匹配而失败。
标签: sql sql-server unicode ssis ascii