为什么数据类型 DT_NTEXT 来自 SQL 命令 OLE DB 源?
Why Data Type DT_NTEXT from SQL Command OLE DB Source?
在我们的 SSIS 包中,在数据流 OLE DB 源编辑器中,连接管理器是一个 SQL 命令,SQL 命令文本是这样的:
With Managers AS (
select distinct t1.ID,
STUFF((SELECT distinct ' & ' + t2. MgrName
from myTableA t2
where t1.ID = t2.ID
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,3,'') MgrName
from myTableA)
select Managers.MgrName as ManagerName
:
FROM myTableB INNER JOIN myTableA
ON myTableB.ID = myTableB.ID
当我右键单击 OLE DB 源 > 显示高级编辑器 > 输入和输出属性时,ManagerName 的数据类型是 Unicode 文本流 [DT_NTEXT]。
为什么数据类型是 DT_NTEXT,而不是 DT_WSTR 或 DT_STR?
OLE DB 目标(SQL 服务器数据库)的数据类型是 VARCHAR,所以在填充 OLE DB 目标之前,我需要从
进行“数据转换”
Unicode text stream [DT_NTEXT]
To
Unicode string [DT_WSTR]
To
string [DT_WSTR]
DT_WSTR
和 DT_STR
的最大长度分别为 4,000 和 8,000 个字符。因此,它们太小而无法映射到 (n)varchar(MAX)
,因此使用 DT_NTEXT
和 DT_TEXT
。
在我们的 SSIS 包中,在数据流 OLE DB 源编辑器中,连接管理器是一个 SQL 命令,SQL 命令文本是这样的:
With Managers AS (
select distinct t1.ID,
STUFF((SELECT distinct ' & ' + t2. MgrName
from myTableA t2
where t1.ID = t2.ID
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,3,'') MgrName
from myTableA)
select Managers.MgrName as ManagerName
:
FROM myTableB INNER JOIN myTableA
ON myTableB.ID = myTableB.ID
当我右键单击 OLE DB 源 > 显示高级编辑器 > 输入和输出属性时,ManagerName 的数据类型是 Unicode 文本流 [DT_NTEXT]。
为什么数据类型是 DT_NTEXT,而不是 DT_WSTR 或 DT_STR?
OLE DB 目标(SQL 服务器数据库)的数据类型是 VARCHAR,所以在填充 OLE DB 目标之前,我需要从
进行“数据转换”Unicode text stream [DT_NTEXT]
To
Unicode string [DT_WSTR]
To
string [DT_WSTR]
DT_WSTR
和 DT_STR
的最大长度分别为 4,000 和 8,000 个字符。因此,它们太小而无法映射到 (n)varchar(MAX)
,因此使用 DT_NTEXT
和 DT_TEXT
。