如何从 oledb 命令插入 oledb 目标
我试图在 ole db 目标中插入 ole db 源中每条记录的 sp 结果,
sp 返回一个记录集,
我发现了这个 如何在 SSIS 中调用存储过程
但我仍然看不到 OleDb 命令输出列中的输出列,
这是我的 sp:
create PROCEDURE [dbo].[GetData] (
@user varchar(50)
) AS
set nocount on
-- Publish metadata for ssis
if 1=0
begin
select '' x, '' y, '' z
end
declare @user_tmp table
(
x varchar(max),
y varchar(max),
z varchar(max)
)
insert into @user_tmp
select 'x1' x, 'y1' y, 'z1' z
select distinct * from @user_tmp
set nocount off
I'm trying to insert in a ole db destination the result of a sp for each record in an ole db source,
the sp returns a record set
I have found this how to call a stored procedure in SSIS
but i still can't see the outpout columns in OleDb Command Output Columns
here is my sp:
create PROCEDURE [dbo].[GetData] (
@user varchar(50)
) AS
set nocount on
-- Publish metadata for ssis
if 1=0
begin
select '' x, '' y, '' z
end
declare @user_tmp table
(
x varchar(max),
y varchar(max),
z varchar(max)
)
insert into @user_tmp
select 'x1' x, 'y1' y, 'z1' z
select distinct * from @user_tmp
set nocount off
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是否可以得到插入语句的结果? 尝试设置 NOCOUNT ON。
http://msdn.microsoft.com/en-us /library/aa259204(SQL.80).aspx
Is it maybe getting the result of the insert statement? Try SET NOCOUNT ON.
http://msdn.microsoft.com/en-us/library/aa259204(SQL.80).aspx
我没有尝试过表变量,但我知道如果您使用临时表,SSIS 将无法识别字段,并且表变量可能具有相同的限制。 但是,如果您使用 CTE,它会识别这些字段。 如果您可以转换为使用 CTE,您的过程可能会起作用。
I've not tried table variables, but I know that SSIS will not recognize fields if you use temp tables and table variables may have the same limitation. It will recognize the fields if you use a CTE however. If you can convert to using a CTE, your proc might work.
在源和目标之间添加 ETL 设计选择或要求(派生列、数据转换等)。
OLE DB 命令 用于为每个传递的行执行 SQL,而不是创建数据流,例如您需要逐行类型执行。
Do use a OLE DB Destination for the destination of the output of your OLE DB Source (Which gets the SP result data).
Add in ETL design choices or requirements (Derived columns, Data Conversion, etc) between source and destination.
OLE DB Command is used to perform a SQL for each passing row, not to create a flow of data, for example you need a row-by-row type execution.