1

我按照http://msdn.microsoft.com/en-us/library/bb895315.aspx上的步骤来实现增量加载。根据 step1 的最后一步,我在 SSDT 中声明了一个字符串变量,并为其分配了一个字符串 SqlString='select * from CustomizedFunction(Argument1,Argument2,Argument3)' SqlString 很好,因为我已经在 SSMS 中打印出来了.

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

Hresult:0xC0202009 错误在数据流任务-LoadData [OLEDB 源 [1]]:SSIS 错误代码 DTS_E_OLEEBERROR。发生 OLEDB 错误。错误代码:0x80040E0C。OLEDB 记录可用。来源:“Microsoft SQL Server Native Client11.0” HResult:0x80040E0C 描述:“未为命令对象设置命令文本。”

4

3 回答 3

0

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

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

在配置OLEDB 源时,您在数据访问模式中选择了选项“ SQL Command from Variable ”并选择变量“SqlString”。

于 2013-06-11T09:01:36.550 回答
0

根据最近处理此问题的经验,我添加了一个更新的答案。

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

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

于 2021-03-02T16:37:10.497 回答
0

SSIS OLE DB Source 必须具有初始列定义才能工作。当您使用“来自变量的 SQL 命令”时,您需要提供此列定义。

让我从这个概念的一般应用开始。然后我将解决您的特定情况。

一般情况

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

例如,将变量的初始值设置为:

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)'
于 2016-04-14T17:31:59.820 回答