SSIS开发-如何处理每15天在源处创建的新表



我正在开发一个SSIS包,它使用来自源SQL和目标FLATFILE的数据。

我面临的一个挑战,请帮助我如何解决它。

上游每2周在SQL源中创建一个新表,如何处理这种情况?我不想每次为新创建的表修改SSIS包。新表的Schema不相同

是否有任何方法来处理这个配置文件或任何控制文件。或者为了实现这一点,我是否需要转换到不同的技术堆栈。请帮助

许多感谢

"新表的Schema不相同">

那么SSIS数据流不是适合你的技术。数据流与源元数据和目标元数据紧密绑定,改变模式是行不通的1

"我需要切换到不同的技术堆栈">

也许吗?也许不是。作为一个执行框架,SSIS仍然可以提供本地日志记录、配置和对本机组件主机的访问,以及为您可能需要做的任何其他事情提供. net运行时。

I如何解决这个问题?

如果您需要将任意表的内容导出为平面文件,我会使用我信任的朋友BCP

作为一个示例调用,下面将使用集成安全性

将名为MyTable的表导出到一个以制表符分隔的文件
bcp dbo.MyTable out "C:tempAdventureWorks.dbo.MyTable.txt" -S ERECHDEV2019UTF8 -d AdventureWorks -T -c -a 32768

您可以通过执行进程任务从SSIS调用bcp。

如何处理表名的变化?可能是像

这样的查询
-- Generate a list of tables created in the past 16 days
-- Make the table name safe for consumption by BCP via quotename
SELECT
CONCAT(QUOTENAME(S.name), '.', QUOTENAME(T.name)) AS QualifiedTable, T.create_date 
FROM 
sys.schemas AS S 
INNER JOIN 
sys.tables AS T 
ON T.schema_id = S.schema_id 
WHERE 
T.create_date > DATEADD(DAY, -16, GETDATE()) 
ORDER BY T.create_date DESC;

1你可以让它工作假设总是有共同的核心元素,你只需要导出这些实体。

例如,给定这些表定义,您可以提取前3列,在源查询中使用一些类型转换,并始终填充输出文件

CREATE TABLE dbo.Week0
(
id varchar(10)
,   Col1 float
,   Col2 int
,   ExtraColumn varchar(50)
);
CREATE TABLE dbo.Week1
(
externalId int
,   Col11 float
,   Col2 varchar(50)
);

这将是大量的动态查询生成和希望和猜测,但它可以完成,但可能不应该。

相关内容

  • 没有找到相关文章

最新更新