【问题标题】:Create function to execute code创建函数来执行代码
【发布时间】:2012-07-25 11:38:36
【问题描述】:

我通常不会使用函数来执行代码,但是我的老板坚持要我使用函数而不是 SP 来执行 SSIS 包。真的不知道为什么!

我需要创建一个函数来执行以下代码,并且用户在调用该函数时只需要提供 SSIS 包名称。

declare @cmdtest varchar(200)
set @cmdtest = 'dtexec /f "C:\Users\Desktop\testpackage.dtsx"'
exec master..xp_cmdshell @cmdtest

上面的代码将执行我的 testpackage.dtsx,现在我的函数必须只询问 SSIS 包名称并且必须是 varchar。

由于我对功能一无所知,有人可以告诉我这样做的最佳方法是什么。我假设需要使用标量函数?

【问题讨论】:

  • 我认为您的老板不了解 SQL Server 中函数的作用。让他们阅读此内容,例如:stackoverflow.com/questions/1179758/… ... 或找出他们坚持某项功能的原因并与我们分享这些信息。

标签: sql-server tsql function ssis


【解决方案1】:

可能是这样的:

CREATE FUNCTION dbo.ExecutePackage
(
    @PackageName VARCHAR(30)
)
RETURNS BIT
AS 
BEGIN
    DECLARE @cmdtest varchar(200);
    SET @cmdtest = 'dtexec /f "C:\Users\Desktop\'+ @PackageName + '.dtsx"';
    EXEC master..xp_cmdshell @cmdtest;

    RETURN 1; --you could do some error checking and return either true or false - just a thought
END

然后你执行它

SELECT dbo.ExecutePackage('testpackage');

【讨论】:

  • 我不同意这种做法。您正在将一个函数硬塞到一个不适合函数的目的中,并且您需要在服务器上启用 xp_cmdshell 来执行此操作,并且您可能还需要提升调用者的权限。
  • @AaronBertrand:我完全同意你的看法。只是回答OP的问题。给猫剥皮总是有更多方法。
  • xp_cmdshell 在服务器上启用
  • @Etienne 没有使函数成为执行此操作的正确方法。我的车里可能有一个弹射座椅,但这不是让我岳母在商场下车的正确方式。
  • @Etienne 喜欢跳桥吗?有时你可以质问老板,问WHY
猜你喜欢
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 2019-11-05
相关资源
最近更新 更多