我有一个带有数据转换任务(数据泵)的 DTS 包。我想使用带参数的存储过程的结果来获取数据,但 DTS 不会预览结果集,也无法定义数据转换任务中的列。
有没有人让这个工作?
警告:存储过程使用两个临时表(并清理它们,当然)
我有一个带有数据转换任务(数据泵)的 DTS 包。我想使用带参数的存储过程的结果来获取数据,但 DTS 不会预览结果集,也无法定义数据转换任务中的列。
有没有人让这个工作?
警告:存储过程使用两个临时表(并清理它们,当然)
为存储过程参数输入一些有效值,以便它运行并返回一些数据(甚至没有数据,您只需要列)。然后您应该能够进行映射/等。然后进行断开连接的编辑并更改为实际参数值(我假设您是从全局变量中获取它们的)。
DECLARE @param1 DataType1
DECLARE @param2 DataType2
SET @param1 = global variable
SET @param2 = global variable (I forget exact syntax)
--EXEC procedure @param1, @param2
EXEC dbo.proc value1, value2
基本上你像这样运行它,这样程序就会返回结果。进行映射,然后在断开连接的编辑中注释掉第二个EXEC
并取消注释第一个EXEC
,它应该可以工作。
基本上你只需要让程序运行并吐出结果。即使您没有返回任何行,它仍然会正确映射列。我无权访问我们的生产系统(甚至数据库)来创建 dts 包。所以我在一个虚拟数据库中创建它们,并将存储过程替换为返回生产应用程序将运行的相同列但没有数据行的东西。然后在映射完成后,我用真实的程序将它移到生产箱中,它就可以工作了。如果您通过脚本跟踪数据库,这将非常有用。您可以只运行脚本来构建一个空的 shell 过程,然后在完成后运行脚本来放回真正的过程。
您需要将它们实际加载到表中,然后如果必须进行转换,则可以使用 SQL 任务将其从该表移动到 perm 位置。
但是,我发现如果使用存储过程来获取数据,几乎可以同时快速轻松地将其移动到目的地!
不,我只能通过让 DTS 将状态保存在废品表中来存储过程。