【问题标题】:How to use variable with sql query in ssis te variable如何在 ssis te 变量中使用带有 sql 查询的变量
【发布时间】:2017-09-14 18:48:21
【问题描述】:

变量值:-89

错误信息 包验证错误 ------------------------------ 附加信息: DFT_SSISDB_To_DWH [OLEDB_SRC_executions & event_messages [58]] 错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80040E14。 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80040E14 描述:“无法准备语句。”。 OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 11.0” Hresult:0x80040E14 描述:“必须声明标量变量“@”。”。 DFT_SSISDB_To_DWH [SSIS.Pipeline] 处出错:“OLEDB_SRC_executions & event_messages”验证失败并返回验证状态“VS_ISBROKEN”。 DFT_SSISDB_To_DWH [SSIS.Pipeline] 处出错:一个或多个组件验证失败。 DFT_SSISDB_To_DWH 错误:任务验证期间出现错误。 (Microsoft.DataTransformationServices.VsIntegration)

变量查询

"SELECT Distinct
    em.event_message_id
    --,em.operation_id
    ,ex.execution_id
    ,em.package_name
    ,CASE
    WHEN em.message_source_type = 10 THEN '10 - Entry APIs, such as T-SQL and CLR Stored procedures'
    WHEN em.message_source_type = 20 THEN '20 - External process used to run package (ISServerExec.exe)'
    WHEN em.message_source_type = 30 THEN '30 - Package-level objects'
    WHEN em.message_source_type = 40 THEN '40 - Control Flow tasks'
    WHEN em.message_source_type = 50 THEN '50 - Control Flow containers'
    WHEN em.message_source_type = 60 THEN '60 - Data Flow task'
    END as message_source_type_description
    ,em.message
    --,em.subcomponent_name
    --,em.package_path
    ,em.message_time
    ,ex.created_time
    ,ex.server_name
    FROM [catalog].[event_messages] em WITH (NOLOCK)
    INNER JOIN [catalog].[executions] ex WITH (NOLOCK) ON ex.execution_id = em.operation_id
    WHERE em.message_type = 120 --Selects Errors Only. Add 110 for Warnings
    AND ex.created_time >=  DATEADD(SECOND,-1,CONVERT(datetime, CONVERT(date,  DATEADD(DAY, **@[User::LastDayTime]**, GETDATE()))))
    --AND ex.execution_id = 628"

【问题讨论】:

    标签: ssis


    【解决方案1】:

    替换这个 @[User::LastDayTime]

    "+ @[User::LastDayTime] + "
    

    它将以这种方式使用您的变量。

    将您的评论合并到我的答案中:

    设置变量@sql =

    "SELECT Distinct
        em.event_message_id
        --,em.operation_id
        ,ex.execution_id
        ,em.package_name
        ,CASE
        WHEN em.message_source_type = 10 THEN '10 - Entry APIs, such as T-SQL and CLR Stored procedures'
        WHEN em.message_source_type = 20 THEN '20 - External process used to run package (ISServerExec.exe)'
        WHEN em.message_source_type = 30 THEN '30 - Package-level objects'
        WHEN em.message_source_type = 40 THEN '40 - Control Flow tasks'
        WHEN em.message_source_type = 50 THEN '50 - Control Flow containers'
        WHEN em.message_source_type = 60 THEN '60 - Data Flow task'
        END as message_source_type_description
        ,em.message
        --,em.subcomponent_name
        --,em.package_path
        ,em.message_time
        ,ex.created_time
        ,ex.server_name
        FROM [catalog].[event_messages] em WITH (NOLOCK)
        INNER JOIN [catalog].[executions] ex WITH (NOLOCK) ON ex.execution_id = em.operation_id
        WHERE em.message_type = 120 --Selects Errors Only. Add 110 for Warnings
        AND ex.created_time >=  DATEADD(SECOND,-1,CONVERT(datetime, CONVERT(date,  DATEADD(DAY, " + @[User::LastDayTime] + ", GETDATE()))))
        --AND ex.execution_id = 628"
    

    在执行sql任务中执行变量@sql

    这里也一样:

    @sql =
    "DELETE [etl].[ErrorMessage] where created_time <= ( DATEADD(SECOND,-1, 
    CONVERT(datetime, CONVERT(date, DATEADD(DAY, "+ @variable +", GETDATE())))))"
    

    现在执行@sql

    【讨论】:

    • 执行sql任务statemnt查询:DELETE [etl].[ErrorMessage] where created_time
    • sql将SSIS包运行时出现的错误保存在哪里?
    • 我不认为它是固有的,但你可以打开日志记录。我更喜欢登录到文件系统(主要是因为它在 PROD 中访问起来更快。
    • SSIS 可以随任务一起部署吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    相关资源
    最近更新 更多