我想执行具有临时表的SP并使用600行代码查询。所以我将SP代码插入变量,然后我调用OLEDB源代码编辑器
临时表:
IF OBJECT_ID('tempdb..##TGJAE' ) IS NOT NULL DROP TABLE ##TGJAE
SELECT
VOUCHER,
DATAAREAID,
TAXITEMGROUP,
TAXBASEAMOUNT,
SOURCERECID
INTO ##TGJAE
FROM TAXTRANS
但是当我尝试保存时,我遇到了问题:
TITLE:Microsoft Visual Studio
来自HRESULT的异常:0xC020204A流程错误[查询 [16]]:SSIS错误代码DTS_E_OLEDBERROR。 OLE DB错误 发生了。错误代码:0x80004005。 OLE DB记录可用。 来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80004005 描述:“因为语句无法确定元数据 '选择VT.ACCOUNTNUM为[CódigodeProveedor],“RFC”= CASE时 V.RFC_MX =''然后v.VATNUM其他v'使用临时表。“。
流程中的错误[查询[16]]:无法检索列 来自数据源的信息。确保您的目标表在 数据库可用。
任何人都知道那里发生了什么?此致
答案 0 :(得分:1)
这里有点猜测,但您可能需要明确定义临时表以传递SSIS查询验证。
尝试使用完整的create语句而不是SELECT... INTO
:
CREATE TABLE ##TGJAE (
VOUCHER datatype,
DATAAREAID datatype,
TAXITEMGROUP datatype,
TAXBASEAMOUNT datatype,
SOURCERECID datatype);
INSERT INTO ##TGJAE
SELECT VOUCHER,
DATAAREAID,
TAXITEMGROUP,
TAXBASEAMOUNT,
SOURCERECID
FROM TAXTRANS
SSIS对元数据非常挑剔,使用SELECT... INTO
创建表意味着SSIS在创建之前不知道表列的元数据。即。元数据无法确定。
答案 1 :(得分:1)
这里有一些混乱:
时间表和临时表是完全不同的东西。 #
表示您正在使用临时表。使用临时表的可能性有很大提高,特别是在这种情况下你必须首先加载它!
OLE DB源组件需要输出数据集。您编写的SQL根本不输出数据集,这就是您收到错误的原因。您的SQL将数据加载到临时表中,但不输出数据
根据您的示例,您只需将代码更改为:
SELECT
VOUCHER,
DATAAREAID,
TAXITEMGROUP,
TAXBASEAMOUNT,
SOURCERECID
FROM TAXTRANS;
答案 2 :(得分:0)
您需要做的是将其拆分为两个操作。在'执行SQL任务'中删除并创建语句以及表填充。在DFT中使用select语句。确保'延迟验证'为了运行,您的DFT设置为true。还要确保创建了物理表,而不是全局临时表。
我也建议不要每次都丢弃,而是使用截断语句。