2012-07-25 69 views
0

我通常不会使用函数来执行代码,但我的老板坚持使用函数而不是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。

因为我不知道功能有人请告诉我这是做什么的最好方法。我假设需要使用一个标量函数?

+5

我不认为你的老板理解SQL Server中的功能是什么。让他们阅读这个,例如:http://stackoverflow.com/questions/1179758/function-vs-stored-procedure-in-sql-server ...或找出他们为什么坚持一个功能,并与我们。 – 2012-07-25 11:45:22

回答

3

也许是这样的:

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'); 
+3

我不同意这种方法。您将功能变成了一种功能,并不意味着功能,您需要在服务器上启用xp_cmdshell才能这样做,并且您可能还需要为调用方提升权限。 – 2012-07-25 11:46:14

+2

@AaronBertrand:我完全同意你的看法。只是回答OP的问题。总是有更多的方法来给猫上皮。 – tobias86 2012-07-25 11:48:36

+0

在服务器上启用xp_cmdshell – Etienne 2012-07-25 11:49:18