Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 是否有一种简单的方法向SSIS包提供参数?_Sql Server_Sql Server 2008_Ssis - Fatal编程技术网

Sql server 是否有一种简单的方法向SSIS包提供参数?

Sql server 是否有一种简单的方法向SSIS包提供参数?,sql-server,sql-server-2008,ssis,Sql Server,Sql Server 2008,Ssis,为SSIS包配置参数的最佳方法是什么?(即什么是常见的/容易的/简单的) 我正在开发一个SSIS包,我想指定要监视源文件的文件夹的位置。我想让部署SSIS包的人尽可能地轻松 例如,我看到使用dtexecui为连接管理器指定连接字符串很容易,但我看不到参数的位置。i、 e.“设置值”选项卡中未显示任何变量 我查看了包配置,但它们似乎必须由SSIS开发人员创建,而不是由SSIS包运行人员/部署人员创建(我可能缺少一些东西)SSMS中应该有一个变量选项卡,允许您指定要为其设置值的变量。您可以将它们存储

为SSIS包配置参数的最佳方法是什么?(即什么是常见的/容易的/简单的)

我正在开发一个SSIS包,我想指定要监视源文件的文件夹的位置。我想让部署SSIS包的人尽可能地轻松

例如,我看到使用dtexecui为连接管理器指定连接字符串很容易,但我看不到参数的位置。i、 e.“设置值”选项卡中未显示任何变量


我查看了包配置,但它们似乎必须由SSIS开发人员创建,而不是由SSIS包运行人员/部署人员创建(我可能缺少一些东西)

SSMS中应该有一个变量选项卡,允许您指定要为其设置值的变量。

您可以将它们存储在表中,然后在运行时使用执行SQL任务从表中动态填充变量,这样您就不必修改包


要添加变量视图-->其他Windows-->变量,请单击添加变量图标(左上角)

包配置由开发人员创建,但它们填充SQL表、XML文件、注册表或环境变量。因此,填充哪些值取决于开发人员,但实际值可以在部署时更改


我发现最好的组合是将包配置放在SQL表中,并将该表的连接字符串放在环境变量中。这样,您就可以维护不同的测试和生产环境。

我认为没有一种简单易行的方法可以让可配置参数传递变得简单,便于用户/部署人员进行配置。下面是我几年前做的一个半复杂的概述

SQL代理作业定期调用一个存储过程,该过程执行一些检查,必要时准备数据,启动SSIS包,并通过参数将准备好的数据传递到包中;这些值要么来自手头的工作,要么来自它根据每个环境配置的数据库“配置表”。考虑到我们的扩展环境的性质,使用传递到包中的参数比尝试让包找出数据的去向要简单得多

调用包是通过构建复杂脚本并将其作为参数传递给xp_cmdshell来完成的
DTEXEC
是要调用的可执行文件,它具有强制和可选开关,例如/File,用于指定包所在的位置。为了使用参数,我在包中将变量sich定义为“filefolder”和“EMail_SMTPServer”,然后使用/Set开关将值传递给它们,如下所示:

    SET @Command = 'DTEXEC'
     + ' /File "' + @PackageLocation + '\' + @PackageName + '"'
     + ' /Set \package.variables[FilesFolder].Value;"' + @FilesFolder + '"'
     + ' /Set \package.variables[EMail_SMTPServer].Value;' + @SMTPServer
/Set将其Value属性替换为指定的值。请注意filefolder的额外“引号”,以说明名称中嵌入的空格

这是一个相当复杂的实现过程——我记得让分号分隔的电子邮件收件人正常工作是一件很有趣的事情。事实是,它在几个环境中已经平稳运行了大约2年,建立一个新的环境是一个有文档记录的过程,因此相对来说没有痛苦


实现这类功能的方法有很多,这只是其中之一。

我想我遗漏了一些明显的东西。我看不到。查看-->其他窗口-->变量,我在BIDS中看到了变量选项卡(在我的例子中是visual studio)。但我不知道如何让部署人员更容易地提供值。(他们会知道这些值,但我不会提前)。你是想让他们在通过SQL代理任务的调度或通过命令行运行时设置值吗?我从来没有想到过!我肯定会考虑的。很遗憾,没有比“更新表中的值”更容易的SSIS解决方案。“。还有其他方法,如配置文件,但表对我来说似乎更容易,特别是如果有人需要更新值,但无法访问SQL代理作业或程序包Hanks Philip,我认为你说的“我认为没有简单易行的方法…”一针见血。它最直接地回答了这个问题。:-)“如何让我的用户使用起来更简单”是一个重要的问题,最终只有你才能回答。希望我们的建议能有所帮助!请注意,您的连接字符串和变量也可以在对包的调用中指定,即在将要执行它的作业步骤中指定。这两种方法我都做过,如果包有一组源/目标位置,那么基于环境变量的配置表和该表的连接字符串就可以很好地工作。但是,如果需要使用不同的配置重复运行同一个包(将同一组数据分发到多个位置),则在作业步骤中设置值通常效果更好,诀窍在于语法正确。@Rowzel-我以前是这样做的,但当我遇到一个客户机时,它的标准安全设置非常奇怪,并且由于某种原因,我们无法从作业步骤中获取信息,我就停止了。