Sql server SSIS项目中oracle更新查询中的Varchar2

Sql server SSIS项目中oracle更新查询中的Varchar2,sql-server,oracle,ssis,Sql Server,Oracle,Ssis,我需要使用SSIS更新Oracle数据库中的。我正在使用自定义数据库任务,并使用如下查询: UPDATE Table SET column1 = ? where KEY = ? 密钥取自SQL Server表,属于nvarchar(3)类型,oracle数据库中的密钥属于varchar2(3)类型。首先,它抱怨密钥是4个字符,所以我将查询改为 UPDATE Table SET column1 = ? where KEY = TRIM(CAST(? AS VARCHAR(3))) 它适

我需要使用SSIS更新Oracle数据库中的。我正在使用自定义数据库任务,并使用如下查询:

  UPDATE Table SET column1 = ? where KEY = ?
密钥取自SQL Server表,属于nvarchar(3)类型,oracle数据库中的密钥属于varchar2(3)类型。首先,它抱怨密钥是4个字符,所以我将查询改为

  UPDATE Table SET column1 = ? where KEY = TRIM(CAST(? AS VARCHAR(3)))
它适用于包含3个字符的键,但也有2个字符长的键。我试过修剪它,转换它。但我不能让它为2个字符的关键工作


用于char的Oracle字符集为AL32UTF8,用于NCHAR的Oracle字符集为AL16UTF16。

在更新步骤之前,我已通过使用KEY_LEN as LEN(KEY)创建派生列解决了此问题。然后我在更新中使用它作为第三个参数:

UPDATE Table SET column1 = ? where KEY = SUBSTR(?,0,?)

你确定其中一个系统没有填充空间或其他东西吗?如果您直接在两个数据库中选择where key='12',那么看起来是2的那个些,两次都会得到结果吗?如果对那些看起来是2的数据进行长度计算,那么得到的长度是3吗?直接在oracle中运行的查询会进行更新。所以oracle中的键没有空格。SQL Server中的源代码也是如此,我检查了长度,在更新步骤之前,长度为2个字符。我也尝试过KEY=TRIM(CAST(?AS VARCHAR(3)),但也不起作用。从SQL Server提交的字符是否可能在Oracle中占用多个字节,因此不适合?例如,如果Oracle DB将characterset设置为AL32UTF8,则每个字符可以占用一到四个字节,7位ASCII字符占用一个字节,其他字符占用更多的字节。默认情况下,
varchar2(3)
varchar(3字节)
不是
varchar(3字节)
。SQL Server的nvarchar上的每个字符都是16位UNICODE字符或代理项对的一半。如果SQL Server有两个非ascii字符,在这种情况下,它在Oracle上可能会变成4个(或更多)字节。所有键都只使用ASCI代码。有一个问题是,DT_WSTR哪个SSI代表MS SQL varchars,oracle的varchar2应该比实际长度长2字节。