我正在通过Biml创建一个SSIS项目(使用Vimgence BimlExpress页面的当前版本的BimlExpress ),该项目使用数据流任务中的脚本组件.创建项目时没有问题,但是当它到达脚本组件时会出现错误:
无法加载文件或程序集'Microsoft.SqlServer.DTSPipelineWrap,Version = 14.100.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91'或其依赖项之一.该系统找不到指定的文件.
在Script.Sain.PreExecute()at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.PreExecute()
我可以在GAC中看到这个dll,当我尝试手动添加引用时,SSIS声明我无法添加它,因为它已经包含在项目中.
但是,如果我打开脚本组件并手动操作Build- 但不做其他更改 - 数据流任务将毫无问题地运行.
为了澄清,我知道我没有改变任何其他因为我每次想要测试一种新方法时都会从Biml重新创建这个项目,这提供了一致的基线.
有谁知道为什么包含对GAC dll的引用的脚本组件只能在手动Built但不是事先工作?
虽然在不同的环境中,我之前使用过这个确切的Biml没有问题.使用Visual Studio 2012对抗SQL Server 2016实例但在Visual Studio 2015(针对2012)中不针对SQL Server 2016实例.
对于进一步的上下文,我还测试了这个输出针对SQL Server 2012,2014和2016的SSIS项目以及完全相同的错误消息.
这似乎肯定是项目中的dll版本问题,作为BimlExpress的输出,因为如果我v4.0_14.100.0.0__89845dcd8080cc91在C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SqlServer.DTSPipelineWrap脚本组件中手动创建带有版本13 dll 的文件夹,现在错误输出如下:
System.InvalidCastException:无法将类型为"System .__ ComObject"的COM对象强制转换为接口类型"Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100".此操作失败,因为由于以下错误,对IID'{ ID in removed in case }' 的接口的COM组件的QueryInterface调用失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE)).
在Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(例外e)
在Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.PreExecute()
在Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostPreExecute(IDTSManagedComponentWrapper100包装器)
我正在尝试通过BIML将脚本任务添加到我的SSIS包中.这是怎么做到的?我添加了以下内容,但ScriptTaskProjectName无法解析.
<Script Name="Script Task" LoggingMode="Enabled">
<ScriptTaskProjectReference ScriptTaskProjectName="MyScript" />
</Script>
Run Code Online (Sandbox Code Playgroud) 我正在使用BIML构建多个SSIS包,我必须在日期间隔之间从OLE DB源检索数据.这是要生成包的xml:
<Dataflow Name="DFT Insert into <#=TableName#>">
<Transformations>
<OleDbSource Name="Retreive from Source (<#=TableName#>)" ConnectionName="AS400">
<DirectInput>
SELECT s.*
FROM <#=TableSchema#>.<#=TableName#> s
WHERE s.date > ? AND s.date <= ?
</DirectInput>
<Parameters>
<Parameter Name="0" VariableName="User.StartDate"/>
<Parameter Name="1" VariableName="User.MiddleDate"/>
</Parameters>
</OleDbSource>
<OleDbDestination Name="Insert into Destination (<#=TableName#>)" ConnectionName="DB2Mirror" KeepNulls="true" CheckConstraints="false">
<ExternalTableOutput Table="[<#=TableSchema#>].[<#=TableName#>]" />
</OleDbDestination>
</Transformations>
</Dataflow>
Run Code Online (Sandbox Code Playgroud)
这个结构通常会起作用,因为我已经尝试了它但是使用了ID(int)而不是date(string).我在尝试生成包时收到的错误如下:
Could not execute Query on Connection AS400
OleDbCommand.Prepare method requires all variable length parameters to have an explicitly set non-zero Size.
Run Code Online (Sandbox Code Playgroud)
我知道我可以创建一个ssis变量并将查询中的日期连接为表达式,但我想坚持使用<DirectInput>而不是<VariableInput>
附加信息
日期时间(对不起,我忘了提到它是日期时间,但我认为它没有太大变化)变量中的格式是正确的:yyyy-mm-dd …
我正在使用BIML生成一个协调包,它将执行多个SSIS包(一些是并行的,一些是线性的).(我正在使用VS2012和SSIS项目部署模型)
使用下面的代码,我可以生成两个虚拟执行包任务:
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Packages>
<Package ConstraintMode="Linear" AutoCreateConfigurationsType="None" ProtectionLevel="DontSaveSensitive" Name="Coordination">
<Parameters>
<Parameter Name="param1" DataType="Int64" IsRequired="true" IsSensitive="false">1</Parameter>
</Parameters>
<Tasks>
<Container Name="SEQ container" ConstraintMode="Parallel">
<Tasks>
<ExecutePackage Name="Run Package1">
<ExternalProjectPackage Package="Package1.dtsx" />
</ExecutePackage>
<ExecutePackage Name="Run Package2">
<ExternalProjectPackage Package="Package2.dtsx" />
</ExecutePackage>
</Tasks>
</Container>
</Tasks>
</Package>
</Packages>
</Biml>
Run Code Online (Sandbox Code Playgroud)
BIDS Helper生成协调包,没有任何错误.
完成协调包的下一步是使用package参数来控制已执行的包.我没有看到任何传递参数"param1"的方法.
有没有办法在BIML中传递参数?(在执行SQL任务中,我看到此选项,但不在此处)
更新:有一个新版本的BIDSHelper,对项目参数有正确的支持......-> http://bidshelper.codeplex.com/releases/view/112755
如何使用BID和BIML在SQL Server 2008中的模糊查找转换(FLT)对象中选中一个复选框.我假设它将输出列添加到输出路径,我不知道?我想要我的输出
Lookup column = Attribute
Lookup column = AddThisColumn
输出Alias = Attribute2
输出Alias = AddThisColumn
下面是BIML脚本以及2x屏幕截图,1)复选框AddThisColumn未标记(当前状态)2)复选框AddThisColumn勾选(我想要的)
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<OleDbConnection Name="SportsData" ConnectionString="Provider=SQLNCLI10;Server=myServer;Initial Catalog=myCatalog;Integrated Security=SSPI;" DelayValidation="true" />
</Connections>
<Packages>
<Package Name="_my Package" ConstraintMode="Linear">
<Tasks>
<Dataflow Name="My Dataflow Task">
<Transformations>
<OleDbSource Name="SurveyResponses" ConnectionName="SportsData">
<DirectInput>select * from SurveyResponses</DirectInput>
</OleDbSource>
<!-- Performs a fuzzy lookup on the Attribute column against the JuniorSurveyResponse DB, and outputs the corresponding Response column to NewResponse. -->
<FuzzyLookup Name="Fuzzy Lookup Transformation" ConnectionName="SportsData" Exhaustive="true"
MatchIndexName="dbo.JuniorSurveyResponsesIndex" DropExistingIndex="false"
CopyReferenceTable="true" WarmCaches="false" …Run Code Online (Sandbox Code Playgroud) 完成BIML脚本(使用BIDS SQL Server 2008)创建SSIS包后,只需右键单击BIML文件,然后单击生成SSIS包.
如何通过代码(例如C#或SQL)生成SSIS包?我可以想象一下BimlEngine.dll的一些shell脚本,例如BimlEngine.dll - "myFileServer\myBimlScript","生成SSIS包"
我找到了这个c#代码项目 https://github.com/jgsato/BimlGen
特别是这个文件 https://github.com/jgsato/BimlGen/blob/master/BimlGenerator.cs
我只是不确定如何使用它.
谢谢你的帮助.
我有一个情况,我的主biml生成150执行包任务.我需要生成序列容器,以便每个容器(150/10)15执行包主任务包中的序列容器任务.
您能否帮我找到合适的解决方案任何想法/欢迎工作exmaples /代码库!
<Tasks>
<# foreach (var package in RootNode.Packages) { #>
<ExecutePackage Name="Execute <#=package.Name#>" >
<ExternalProjectPackage Package="<#=package.PackageFileName#>" />
</ExecutePackage>
<# } #>
</Tasks>
Run Code Online (Sandbox Code Playgroud) 我使用以下BIML脚本基于源数据库创建每个表的列列表.我还添加了列dwh_timestamp.我使用此脚本创建目标表,添加元数据列.
<Columns>
<# foreach (var column in table.Columns) { #>
<#=column.GetBiml()#>
<# } #>
<Column Name="dwh_timestamp" DataType="DateTime" IsNullable="true"/>
</Columns>
Run Code Online (Sandbox Code Playgroud)
我使用以下代码创建将从源导入数据的SSIS包.
<DirectInput>SELECT <#=table.GetColumnList()#> FROM <#=table.GetTag("SourceSchemaQualifiedName")#></DirectInput>
Run Code Online (Sandbox Code Playgroud)
但是,由于源表不包含dwh_timestamp列,因此会导致错误.
我如何过滤table.GetColumnList()所以它跳过带有"dwh_"前缀的列?
我有这个BIML脚本,它创建了一个主包和子包.子包中有一个ScriptTask,它将父包变量的值映射到子包变量.当我在SSIS(Visual Studio 2015,目标Sql Server 2014)中生成包时,它们生成正常.如果我运行主程序包,则子程序失败并显示以下错误:
DTS Script Task has encountered an exception in user code:
Project name: ST_GetJobLogIdHere
Exception has been thrown by the target of an invocation.
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()
Run Code Online (Sandbox Code Playgroud)
当我在孩子中打开ScriptTask,然后再次关闭它时,包脏了,所以我保存它.之后,运行包正常工作.
这是BIML脚本:
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<ScriptProjects>
<ScriptTaskProject …Run Code Online (Sandbox Code Playgroud) 我正在使用BIML创建SSIS包,并且包的一部分处理发生的错误.我正在使用一个执行SQL任务调用存储过程来记录数据库中的错误详细信息,并且存储过程需要一个参数@Comments,其中包含错误描述和一些其他自定义信息的信息.
我正在尝试创建一个变量Error_Details并使用表达式来构建@Comments参数的值.
<Parameters>
<Parameter Name="ParentPkgID" DataType="Int32">0</Parameter>
</Parameters>
<Variables>
<Variable Name="TableName" DataType="String">
tblEmployee
</Variable>
<Variable Name="Error_Details" DataType="String" EvaluateAsExpression="true">
"Package execution failed, Error details :: " + @[System::ErrorDescription]
</Variable>
</Variables>
Run Code Online (Sandbox Code Playgroud)
问题是当我使用上面的代码创建变量时包创建失败,我理解表达式构建器中没有System :: ErrorDescription,但是我的选项在这里有什么.
如何使用一些仅在BIML代码中的某些特定上下文中可用的系统变量.
非常感谢您查看我的问题.请提出解决方案.
biml ×10
ssis ×10
sql-server ×3
c# ×2
etl ×1
script-task ×1
sql ×1
ssis-2008 ×1
ssis-2012 ×1
vb.net ×1