集成服务:如何在数据流任务中更改 SQL 服务器 table 的结构?
Integration Service: How do I change the structure of a SQL Server table in a Data Flow task?
我在 Visual Studio.Integration Service 项目中工作。
我想做的是创建一个包,从远程数据库中的SourceTable
读取数据,对数据进行一些转换,然后将其读入另一个数据库中的DestinationTable
。
我知道该怎么做,但我的问题是,在对数据进行转换之前,我想从 table 中删除很多行。
下面的 SELECT 只会选择我想要的行:
FROM (
SELECT
PatientID,
PatientName,
PatientAddress,
PatientPostalNumber,
PatientCity,
ROW_NUMBER() OVER(PARTITION BY PatientID ORDER BY PatientName DESC) rn
FROM SourceTable
) a
WHERE rn = 1
如何实现?
您正在查找数据流任务。这允许您在源和接收器之间移动数据。
您可能想要创建到源数据库和目标数据库的 OLE DB 连接。
将数据流任务添加到您的包中。双击它。
将 OLE DB 源组件添加到数据流中。双击它。
在生成的 window 中,select 指向 SourceTable 数据库的 OLE DB 连接管理器。
将数据访问模式更改为 SQL 命令,然后使用您的查询。
此时,包只会拉入您指定的数据,而不是整个 SourceTable
添加 OLE DB 目标。使用指向 DestinationTable 数据库和 select DestinationTable 作为 table 的 OLE DB 连接管理器。单击“列”选项卡并确保列按预期映射。
修复查询
提供的查询缺少 select,但看起来您试图在 PatientID 中查找所有最小的 PatientName。如果您发现您的方法不能很好地扩展,相关子查询虽然可能需要额外的时间来编写,但通常比 rownumber 方法给我更好的结果
SELECT
PatientID,
PatientName,
PatientAddress,
PatientPostalNumber,
PatientCity,
FROM SourceTable AS ST
WHERE
ST.PatientName =
(
SELECT MAX(STI.PatientName)
FROM SourceTable AS STI
WHERE STI.PatientID = ST.PatientID
);
这只是说给我 SourceTable 中 PatientName 最大的所有行以匹配 PatientIDs
我在 Visual Studio.Integration Service 项目中工作。
我想做的是创建一个包,从远程数据库中的SourceTable
读取数据,对数据进行一些转换,然后将其读入另一个数据库中的DestinationTable
。
我知道该怎么做,但我的问题是,在对数据进行转换之前,我想从 table 中删除很多行。
下面的 SELECT 只会选择我想要的行:
FROM (
SELECT
PatientID,
PatientName,
PatientAddress,
PatientPostalNumber,
PatientCity,
ROW_NUMBER() OVER(PARTITION BY PatientID ORDER BY PatientName DESC) rn
FROM SourceTable
) a
WHERE rn = 1
如何实现?
您正在查找数据流任务。这允许您在源和接收器之间移动数据。
您可能想要创建到源数据库和目标数据库的 OLE DB 连接。
将数据流任务添加到您的包中。双击它。
将 OLE DB 源组件添加到数据流中。双击它。
在生成的 window 中,select 指向 SourceTable 数据库的 OLE DB 连接管理器。
将数据访问模式更改为 SQL 命令,然后使用您的查询。
此时,包只会拉入您指定的数据,而不是整个 SourceTable
添加 OLE DB 目标。使用指向 DestinationTable 数据库和 select DestinationTable 作为 table 的 OLE DB 连接管理器。单击“列”选项卡并确保列按预期映射。
修复查询
提供的查询缺少 select,但看起来您试图在 PatientID 中查找所有最小的 PatientName。如果您发现您的方法不能很好地扩展,相关子查询虽然可能需要额外的时间来编写,但通常比 rownumber 方法给我更好的结果
SELECT
PatientID,
PatientName,
PatientAddress,
PatientPostalNumber,
PatientCity,
FROM SourceTable AS ST
WHERE
ST.PatientName =
(
SELECT MAX(STI.PatientName)
FROM SourceTable AS STI
WHERE STI.PatientID = ST.PatientID
);
这只是说给我 SourceTable 中 PatientName 最大的所有行以匹配 PatientIDs