如何使用SSIS包转换“SQL_Latin1_ General”Collat​​e?

时间:2012-11-01 15:23:35

标签: sql sql-server-2008 ssis collate

我们刚刚注意到已经使用 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”目的地表?

谢谢!

2 个答案:

答案 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/