数据转换服务  
在 DTS 包中使用全局变量
执行数据转换服务 (DTS) 包时,可以保存某个 DTS 步骤的数据或值,以传递到后续步骤中。例如,可以使用保存的数据更改后续步骤的执行方式,或动态修改 SELECT 语句。 在 DTS 任务中使用全局变量时,可以: 根据财务部门的财政日历,将全局变量设置为月末记帐日期。要完成该设置,可以使用 Microsoft ActiveX® 脚本任务检索值,或在设计期间将全局变量设置为月末记帐日期并在执行包期间引用。包内的步骤可以使用该日期确定名称中包含该日期的文件是否存在。如果存在,该步骤就将文件的记录插入表中。 
或者,还可以在 WHERE 子句中使用全局变量,确定要装载的特定记录(例如,仅装载在该月末日期修改的记录)。 可以使用执行 SQL 任务一次在数据中填充多个全局变量。所有行集也可以保存在一个全局变量中,作为断开的 ActiveX 数据对象 (ADO) 记录集访问。有关更多信息,请参见执行 SQL 任务。 
然后,可以将该全局变量作为内存中查找表使用。使用执行 SQL 任务,对 state 表发出 SELECT 语句,并将结果存储在一个全局变量中。然后,使用转换数据任务,对每一个源行调用 "StateLookup" 函数,通过全局变量记录集反复使用,并且将源字段中的州代码与表中的州代码匹配。如果有匹配的州,则将该州的全名存储在目的列中。有关更多信息,请参见查找查询。创建全局变量
可以在 DTS 中创建全局变量,并通过以下方法为这些变量指派值: 在设计时通过使用: 
DTS 设计器中的"DTS 包属性"对话框。 
"执行 SQL 属性"对话框。有关更多信息,请参见执行 SQL 任务属性。 
在包执行时动态地指派,方法是: 
使用 ActiveX 脚本。
从命令提示中发出 dtsrun 命令提示实用工具并使用 /A 命令开关以便分配和初始化全局变量。 
全局变量的作用域
作用域是指在内存中变量引用的生存周期。作用域取决于声明或初始化变量的位置。全局变量在执行包之后是否仍然可以访问将取决于创建全局变量的方式。 设计时创建的全局变量保留执行完包时的值(如果保存了包)。例如,假设创建了全局变量"city"并将其值设置为"Boston"。在执行包的过程中,ActiveX 脚本将该值由"Boston"改为"Philadelphia"。在下一次执行该包时,全局变量的值为"Philadelphia"而非"Boston"。如果需要查询在执行某个包后该包全局变量的值,这种方法非常有用。 然而,在 ActiveX 脚本中动态创建的全局变量有两种作用域。如果在 Function Main() 上面创建,则可以用于该脚本中的所有函数。该作用域等价于模块级的作用域。如果在某个函数内部进行了声明,则只能在该函数内部使用。该作用域等价于过程级的作用域。在 DTS 包中使用全局变量的示例
下面的示例表明如何使用 ActiveX 脚本在 DTS 包中创建、设置、检索和使用全局变量的值。通过 ActiveX 脚本动态地创建全局变量
如果某个全局变量在运行包时不存在,可以使用 ActiveX 脚本动态地创建一个。要创建一个名为"city"的新全局变量,并为其指派值"Boston",可以使用以下 Microsoft Visual Basic® Scripting Edition (VBScript) 代码:   DTSGlobalVariables("city").value = "Boston"可以在 ActiveX 脚本中动态地创建 COM 对象,并将其存储在全局变量中。下面示例中的 VBScript 代码用来创建 ADO 连接,包中的脚本可以使用该连接执行 SQL 命令并检查 ADO 记录集。在下面的示例中,将创建一个 year-to-date 销售表,其中包含 pubs 数据库中的 Totals 字段:Function Main()
   dim conn
   set DTSGlobalVariables("MyConn").value = CreateObject("ADODB.Connection")   set conn = DTSGlobalVariables("MyConn").value
   conn.provider="sqloledb"
   conn.open  "(local)", "sa", ""
   conn.DefaultDatabase = "pubs"
   conn.execute("Create Table YTDSales (Totals int)")
   Main = DTSTaskExecResult_Success
End Function下面的代码示例表明如何使用 Microsoft JScript® 创建 year-to-date 的 sales 表:function Main()
{
DTSGlobalVariables("MyConn").value = CreateObject("ADODB.Connection");
conn = DTSGlobalVariables("MyConn").value;conn.open = ("provider = sqloledb; data source = (local);user id = sa");
conn.DefaultDatabase = "pubs";
conn.execute("Create Table YTDSales (Totals int)");  return(DTSTaskExecResult_Success)
}通过 ActiveX 脚本动态地设置全局变量的值
下面的 ActiveX 脚本代码(使用 VBScript 编写)将名为 count 的全局变量的值设置为 200:   DTSGlobalVariables("count").value = 200通过 ActiveX 脚本动态地获得全局变量
下面的 ActiveX 脚本代码用 VBScript 编写,获取的全局变量值名为 count,该值保存在名为 globalCount 的变量中:   globalCount = DTSGlobalVariables("count").value通过 ActiveX 脚本动态地使用全局变量
下面的代码将包含文件名的列的值与包含 Julian 日期的全局变量串联在一起,并将新的结果存储在目的表中的文件名列:   DTSDestination("FileName") = DTSSource("FileName") &    DTSGlobalVariable("julianDate").value
请参见添加 DTS 查找和全局变量dtsrun 实用工具©1988-2000 Microsoft Corporation。保留所有权利。

解决方案 »

  1.   

    dtsrun 实用工具
    dtsrun 实用工具执行用数据转换服务 (DTS) 创建的包。DTS 包可存储在 Microsoft® SQL Server™ 2000 msdb 数据库、COM 结构化存储文件或 SQL Server Meta Data Services 中。语法
    dtsrun 
    [/?]|
    [
        [
            /[~]S server_name[\instance_name]
            { {/[~]U user_name [/[~]P password]} | /E }
        ]
        {    
            {/[~]N package_name }
            | {/[~]G package_guid_string}
            | {/[~]V package_version_guid_string}
        }
        [/[~]M package_password]
        [/[~]F filename]
        [/[~]R repository_database_name]
        [/A global_variable_name:typeid=value]
        [/L log_file_name]
        [/W NT_event_log_completion_status]
        [/Z] [/!X] [/!D] [/!Y] [/!C]
    ]用  [/A global_variable_name:typeid=value]
    这个给全局变量赋值。
      

  2.   

    dtsrun /F"e:\web\wwwroot\sunhing\sqlserver\toolsdepart.dts" /Ntoolsdepart
    dtsrun /F"e:\web\wwwroot\sunhing\sqlserver\toolsinfor.dts" /Ntoolsinfor
      

  3.   

    若要执行保存为 COM 结构化存储文件的 DTS 包,请使用:dtsrun /Ffilename /Npackage_name /Mpackage_password若要执行保存在 SQL Server msdb 数据库中的 DTS 包,请使用:dtsrun /Sserver_name /Uuser_nName /Ppassword /Npackage_name /Mpackage_password若要执行保存在 Meta Data Services 中的 DTS 包,请使用:dtsrun /Sserver_name /Uuser_nrame /Ppassword /Npackage_name /Mpackage_password /Rrepository_name
      

  4.   

    上面这些是联机手册的内容,我看过,我的问题就是:比如说我定义了一个全局变量a,它代表一个sql语句,我想在程序的文本框中输入一个字符串,然后将字符串赋值给这个变量,然后用dtsrun带参运行,我该怎么做?能给个例子吗?谢谢!
      

  5.   

    dtsrun ...... /a a:167='select * from table'