我们刚刚注意到已经使用 SQL_Latin1_General_CP1_CI_AS 和 Latin1_General_CI_AS 设置了2台服务器。
我创建了一个脚本,它将两个数据源相互比较(因为它是一个简单的SELECT语句,我没有包含它,它使用相同的列,但来自不同的来源)当我试图将它们合并在一起时我收到整理错误。
Msg 468,Level 16,State 9,Line 2 无法解决之间的整理冲突 UNION操作中的“ SQL_Latin1_General_CP1_CI_AS ”和“ Latin1_General_CI_AS ”。
其中一个来源是一个由 SSIS 包填充的表,是否有一种方法可以在发送之前调整SSIS项目以将“SQL_Latin1_General_CP1_CI_AS”格式转换为“Latin1_General_CI_AS”目的地表?
谢谢!
答案 0 :(得分:1)
您可以在表格中使用SQL_Latin1_General_CP1_CI_AS之类的每一列之后使用句子COLLATE Latin1_General_CI_AS
。
SELECT COLUMN_A COLLATE Latin1_General_CI_AS AS COL1
FROM TABLE
答案 1 :(得分:0)
您的错误消息看起来像您的UNION在一个SQL语句中? 例如SELECT ... UNION ... SELECT
正如Shiva所描述的那样,在SSIS数据流中,您可以使用两个(或更多)OLE DB Source对象,并将它们与“Union All”转换相结合。每个OLE DB Source对象只有一个没有UNION子句的SELECT。此设计在设计/维护(列名称的联合,不需要填充每个源的每个列)和运行时吞吐量方面也具有优势。
我认为您还需要在OLE DB Source对象上使用此技术。 http://blog.stevienova.com/2009/04/16/ssis-pulling-data-from-a-non-default-collation-db-to-a-default-collation-db/