【问题标题】:How to add Temporary Table inside SSIS OLE DB Source如何在 SSIS OLE DB 源中添加临时表
【发布时间】:2021-02-09 16:33:12
【问题描述】:

我想使用 OLE DB 从源中获取数据。 使用 SQL 命令来获取。

我试图用 WITH 子句来设置它。有效。但是需要 更多时间 才能给出输出。

WITH Temp
AS 
(
SELECT C.*
FROM DimCUSTOMER C
INNER JOIN DimSHOP S
ON C.CUST_ID = S.CUST_ID
)

SELECT *
FROM TEMP
WHERE ADDRESS IS NOT NULL

然后我在 SSMS 中使用 # 临时表进行了尝试。 与 with 子句相比,它给的时间更少。 SQL 代码如下。

SELECT C.*
    INTO #Temp
    FROM DimCUSTOMER C
    INNER JOIN DimSHOP S
    ON C.CUST_ID = S.CUST_ID
    
    SELECT *
    FROM #TEMP
    WHERE ADDRESS IS NOT NULL

然后我在 SSIS 包 OLE DB Source 中设置此代码。 但是在其中设置 SQL 代码时出现错误。

【问题讨论】:

  • 您可能应该只使用常规 sql 语句作为源,select c.* from ... where c.address is not null - cte 或临时表需要什么?它纯粹与性能有关吗?向address 字段添加索引可能会解决您的问题。如果一定要,使用sql任务创建,然后在数据流任务中引用。还要确保将连接的retainsameconnection 属性设置为true。有关详细信息,请参阅此解决方案:stackoverflow.com/a/6160015/1073631
  • 正在针对哪个版本的 sql server 运行查询?

标签: sql-server ssis msbi


【解决方案1】:

首先,在设计视图中使用 Execute SQL Task 并将其重命名为 Create Temp Table

IF OBJECT_ID('tempdb..##tmp') IS NOT NULL
    DROP TABLE ##tmp
    CREATE TABLE ##tmp
    (
        //your columns
    )
INSERT INTO ##tmp
SELECT C.*
    FROM DimCUSTOMER C
    INNER JOIN DimSHOP S
    ON C.CUST_ID = S.CUST_ID

一旦表被创建到 SSIS 包中。右键单击 OLE DB 源并选择编辑。选择您的数据源并为数据访问模式下拉菜单选择 SQL 命令。在 SQL 命令文本中,您需要创建我们的 SQL 语句:

SELECT *
    FROM ##temp
    WHERE ADDRESS IS NOT NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多