sqlserver2008 存储过程调用ssis传参问题

shikk22 2013-12-28 01:17:21
CREATE PROCEDURE proc_Test1_Insert
@id int
AS
declare @name nvarchar(500);
EXEC('exec master..xp_cmdshell ''dtexec /f "c:\Package.dtsx" /set \Package.variables[User::userId].Value;' + @id + '''')
GO

参数传不进去。是不是我写的语句有问题。
...全文
442 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2013-12-28
  • 打赏
  • 举报
回复
引用 10 楼 shikk22 的回复:
ssis里面也是简单的很就这一条sql
哦,对了,能不能这样,你执行ssis这个包,带参数,然后你打开sql profiler跟踪一下,看执行的语句有什么不同
shikk22 2013-12-28
  • 打赏
  • 举报
回复

ssis里面也是简单的很就这一条sql
shikk22 2013-12-28
  • 打赏
  • 举报
回复
引用 8 楼 yupeigu 的回复:
[quote=引用 7 楼 shikk22 的回复:]
还是不行一样的结果


create trigger tgr_test1_insert
on [user]
after insert
as
declare @id int;
select @id = id from inserted;
--exec proc_Test1_Insert @id;
declare @cmd varchar(1000);
declare @ssispath varchar(1000);
set @ssispath = 'c:\Package.dtsx';
select @cmd = 'dtexec /F "' + @ssispath + '"';
select @cmd = @cmd + ' /SET \Package.Variables[User::userId].Properties[Value];"' + cast(@id as varchar) + '"';
exec master..xp_cmdshell @cmd;
go

你看看代码


要是把这个命令,带上参数,直接在cmd里运行,慢吗[/quote]


非常快的就完成了。
LongRui888 2013-12-28
  • 打赏
  • 举报
回复
引用 7 楼 shikk22 的回复:
还是不行一样的结果

create trigger tgr_test1_insert
on [user]
    after insert
as
	declare @id int;
	select @id = id from inserted;
	--exec proc_Test1_Insert @id;
	declare @cmd varchar(1000);
	declare @ssispath varchar(1000);
	set @ssispath = 'c:\Package.dtsx';
	select @cmd = 'dtexec /F "' + @ssispath + '"';
	select @cmd = @cmd + ' /SET \Package.Variables[User::userId].Properties[Value];"' + cast(@id as varchar) + '"';
	exec master..xp_cmdshell @cmd;
go
你看看代码
要是把这个命令,带上参数,直接在cmd里运行,慢吗
shikk22 2013-12-28
  • 打赏
  • 举报
回复
还是不行一样的结果

create trigger tgr_test1_insert
on [user]
    after insert
as
	declare @id int;
	select @id = id from inserted;
	--exec proc_Test1_Insert @id;
	declare @cmd varchar(1000);
	declare @ssispath varchar(1000);
	set @ssispath = 'c:\Package.dtsx';
	select @cmd = 'dtexec /F "' + @ssispath + '"';
	select @cmd = @cmd + ' /SET \Package.Variables[User::userId].Properties[Value];"' + cast(@id as varchar) + '"';
	exec master..xp_cmdshell @cmd;
go
你看看代码
shikk22 2013-12-28
  • 打赏
  • 举报
回复
引用 4 楼 yupeigu 的回复:
[quote=引用 3 楼 shikk22 的回复:] to @yupeigu 没有报错。一直在执行。如果我把传的参数去掉。自己指定。立马就运行完必,所以我想是传参的问题。 to @yupeigu 你说的我也试过没用的。
要是把这个命令,带上参数,直接在cmd里运行,慢吗[/quote] 好的我试试。
LongRui888 2013-12-28
  • 打赏
  • 举报
回复
另外, 你看看这个文章: 向SSIS包传递动态参数值 http://hi.baidu.com/hunterzou/item/76e12416534ef158f1090e86 里面有类似的代码:
declare @cmd varchar(1000) 
  declare @ssispath varchar(1000) 
  declare @fileName varchar(1000) 
  set @ssispath = 'C:\temp\Package.dtsx' 
  set @fileName = 'C:\temp\test.csv' 
  select @cmd = 'dtexec /F "' + @ssispath + '"' 
  select @cmd = @cmd + ' /SET \Package.Variables[User::fileName].Properties[Value];"' + @fileName + '"' 
  exec master..xp_cmdshell @cmd
LongRui888 2013-12-28
  • 打赏
  • 举报
回复
引用 3 楼 shikk22 的回复:
to @yupeigu 没有报错。一直在执行。如果我把传的参数去掉。自己指定。立马就运行完必,所以我想是传参的问题。 to @yupeigu 你说的我也试过没用的。
要是把这个命令,带上参数,直接在cmd里运行,慢吗
shikk22 2013-12-28
  • 打赏
  • 举报
回复
to @yupeigu 没有报错。一直在执行。如果我把传的参数去掉。自己指定。立马就运行完必,所以我想是传参的问题。 to @yupeigu 你说的我也试过没用的。
LongRui888 2013-12-28
  • 打赏
  • 举报
回复
是报什么错误了吗
LongRui888 2013-12-28
  • 打赏
  • 举报
回复
改成这样试试: CREATE PROCEDURE proc_Test1_Insert @id int AS declare @name nvarchar(500); EXEC('exec master..xp_cmdshell ''dtexec /f "c:\Package.dtsx" /set \Package.variables[User::userId].Value;' + cast(@id as varchar) + '''') GO

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧