Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 将变量字符串传输到OLE DB数据源时出错_Sql_Sql Server_Tsql_Ssis - Fatal编程技术网

Sql 将变量字符串传输到OLE DB数据源时出错

Sql 将变量字符串传输到OLE DB数据源时出错,sql,sql-server,tsql,ssis,Sql,Sql Server,Tsql,Ssis,我按照的步骤实现增量加载。根据步骤1的最后一步,我在SSDT中声明了一个字符串变量,并将一个字符串作为 SqlString='select*from CustomizedFunction(Argument1、Argument2、Argument3)' SqlString很好,因为我已经在SSMS中打印出来了 但是,当在数据流的OLEDB数据源中访问SqlString时。发生错误 Hresult:0xC0202009 数据流任务加载数据[OLEDB源[1]]时出错:SSIS错误代码DTS_E_Ol

我按照的步骤实现增量加载。根据步骤1的最后一步,我在SSDT中声明了一个字符串变量,并将一个字符串作为 SqlString='select*from CustomizedFunction(Argument1、Argument2、Argument3)' SqlString很好,因为我已经在SSMS中打印出来了

但是,当在数据流的OLEDB数据源中访问SqlString时。发生错误

Hresult:0xC0202009 数据流任务加载数据[OLEDB源[1]]时出错:SSIS错误代码DTS_E_OleeError。发生OLEDB错误。错误代码:0x80040E0C。
OLEDB记录可用。来源:“Microsoft SQL Server Native Client11.0”HResult:0x80040E0C说明:“未为命令对象设置命令文本。”

我不明白您如何在SSIS中打印SSMS中声明的变量

如果表值函数的参数是动态的,则必须在SSIS中将变量声明为字符串,并使用*EXPRESSION*s构建SQL命令


在配置OLEDB源时,您必须在数据访问模式下选择“变量中的SQL命令”选项,并选择变量“SqlString”。SSIS OLE DB源必须具有初始列定义才能工作。使用“来自变量的SQL命令”时,需要提供此列定义

让我从这个概念的一般应用开始。然后我将讨论您的特定场景

一般情况

在某些情况下,您可能有一个没有初始值的字符串变量,并且在过程中的某个时刻,该值被赋值。在这种情况下,必须提供初始值。一种方法是使用提供列和数据类型的虚拟查询

SqlString='SELECT CAST(MyColumn1 AS VARCHAR(10)) AS MyColumn1, CAST(MyColumn2 AS INT) AS MyColumn2 FROM CustomizedFunction(Argument1,Argument2,Argument3)'
例如,将变量的初始值设置为:

SELECT CAST('' AS VARCHAR(10) AS MyColumn1, 0 AS MyInteger FROM MyTable WHERE 1= 2
此查询永远不会返回结果,但它提供OLE DB源所需的列定义。 在执行OLE DB源之前的某个时刻,您需要将实际查询分配给变量

具体案例

你的情况相似,但略有不同。 在您的特定情况下,您有以下查询:

SqlString='select * from CustomizedFunction(Argument1,Argument2,Argument3)'
OLE DB Source不知道
SELECT*
的列定义是什么。您需要将
SELECT*
替换为实际的列名及其数据类型

SqlString='SELECT CAST(MyColumn1 AS VARCHAR(10)) AS MyColumn1, CAST(MyColumn2 AS INT) AS MyColumn2 FROM CustomizedFunction(Argument1,Argument2,Argument3)'
我根据最近在这个问题上的经验得到了一个更新的答案

在为所有列添加别名的步骤之后(为每个列提供一个列标题) 对于SSIS任务,我们必须在高级编辑器中将“验证外部元数据”设置为false。一旦这样做了,错误就为我们消除了


我将此保留在这里,作为将来遇到此问题的用户的额外帮助。

根据错误消息,您是否将命令对象的CommandText设置为字符串?@FebWind,最好将错误消息复制并作为文本而不是图像传递。所以,我们不必使用放大镜。对不起,lgor。我不知道为什么无法将错误消息复制为SSIS中的文本。所以我必须抓拍它并保存为图像。安德鲁,我不明白你的意思。如何设置命令对象的CommandText?我声明了一个由sql语句设置的字符串变量。设置时,使用参数。错误消息是什么?。我们的防火墙似乎阻止了您的屏幕截图。由于名为stringvariable的字符串变量实际上绑定到SSIS中的SQL语句,我想看看这里是否有语法错误。SQL语句以字符串形式返回,例如选择“select…”作为sqlString。然后在结果集选项卡中,将sqlString映射到stringvariable。最后,我想在数据源中使用变量stringvariable。但是我的帖子中显示的错误总是存在的。