Sql server 错误:没有与此查询的执行关联的结果行集
应作为变量存储在执行SQL任务中的查询:Sql server 错误:没有与此查询的执行关联的结果行集,sql-server,ssis,runtime-error,constraints,Sql Server,Ssis,Runtime Error,Constraints,应作为变量存储在执行SQL任务中的查询: Use [Reporting] Go DECLARE @current_month DATETIME, @current_year DATETIME, @current_year_final AS INT, @previous_period_final VARCHAR(2), @test_period AS VARCHAR (2), @previous_period_final_2 VARCHAR(2) SET @current_month
Use [Reporting]
Go
DECLARE
@current_month DATETIME,
@current_year DATETIME,
@current_year_final AS INT,
@previous_period_final VARCHAR(2),
@test_period AS VARCHAR (2),
@previous_period_final_2 VARCHAR(2)
SET @current_month = DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()),0)
SET @current_year = DATEADD(YEAR,DATEDIFF(YEAR,0,GETDATE()),0)
SET @current_year_final = CASE WHEN LEFT(RIGHT(CONVERT(VARCHAR, GETDATE(),112),4),2) = '01' THEN LEFT(CONVERT(VARCHAR,@current_year,112),4)-1 ELSE LEFT(CONVERT(VARCHAR,@current_year,112),4) END
SET @previous_period_final = CASE
WHEN CAST(LEFT(RIGHT(CONVERT(VARCHAR, GETDATE(),112),4),2) AS INT) - 1 BETWEEN 10 AND 11 THEN CAST(CAST(LEFT(RIGHT(CONVERT(VARCHAR, GETDATE(),112),4),2) AS INT) - 1 AS VARCHAR) -- Type Varchar
WHEN CAST(LEFT(RIGHT(CONVERT(VARCHAR, GETDATE(),112),3),1) AS INT) - 1 BETWEEN 1 AND 8 THEN '0' + CAST(CAST(LEFT(RIGHT(CONVERT(VARCHAR, GETDATE(),112),3),1) AS INT) - 1 AS VARCHAR)
WHEN CAST(LEFT(RIGHT(CONVERT(VARCHAR, GETDATE(),112),4),2) AS INT) - 1 = 9 THEN '09'
WHEN LEFT(RIGHT(CONVERT(VARCHAR, GETDATE(),112),4),2) = '01' THEN '12'
ELSE 'Invalid formula' END
SET @previous_period_final_2 = CAST(LEFT(RIGHT(CONVERT(VARCHAR, GETDATE(),112),4),2) AS INT) - 1
-- ### Returns:
-- 1 = 'identical' = row numbers match
-- 0 = 'mis-matched' = row numbers do not match
select sum(rows_identical) as rows from
(
select CAST(CAST(case when count_rows_raw = count_rows_facts then 1 else 0 end as bit)as int) as rows_identical
--,SQL_VARIANT_PROPERTY(CAST(CAST(case when count_rows_raw = count_rows_facts then 1 else 0 end as bit)as int),'BaseType') -- ### EXCELLENT WAY TO RETRIEVE DATATYPE ###
from
(
select
(
select SUM(#rows_facts) as #rows_facts from
(
select COUNT(ID) as #rows_facts, 'finalized_entries_facts_table' as type from facts_reporting
where YearMonthID in (select YearMonthID from dim_year_month as yyMM
where yyMM.YearMonth = CAST(@current_year_final AS Varchar)+'_'+CAST(@previous_period_final AS Varchar))
and SourceID IN (select SourceID from dbo.dim_source where Source = 'Unlocks')
union
select COUNT(ID) as #rows_facts, 'missing_entries_facts_table' as type from missing_ids_Unlocks_raw
where YearMonthID in (select YearMonthID from dim_year_month as yyMM
where yyMM.YearMonth = CAST(@current_year_final AS Varchar)+'_'+CAST(@previous_period_final AS Varchar))
and SourceID IN (select SourceID from dbo.dim_source where Source = 'Unlocks')
) as rows
) as count_rows_facts,
(
SELECT count(*)as #rows_raw from UnlocksRawCSV_table as raw
Where Year_Month_inserted = CAST(@current_year_final AS Varchar) + '_' + @previous_period_final
) as count_rows_raw
)
as row_checks
)
as count_check
--where rows_identical <> 0
SSIS中的变量定义和结果集映射:
在执行SQL任务中,我选择了结果集=单行。我也没有试过。我在执行SQL任务上设置了一个执行后断点,得到了以下结果:
==如果直接在SQL Server中执行上述查询,为什么在SSIS中得到0作为值,而在SSIS中得到1
后续任务中的优先约束如下所示:
编辑1:将此表达式更改为@RowCheck==0不会更改任何内容,因为任务在执行时仍然失败,并出现相同错误:
错误:没有与此查询的执行关联的结果行集
编辑:2:将优先级约束编辑器中的值从成功更改为失败是可行的,但我不明白任务本身为什么失败,以及为什么它会生成上述错误消息?但是,尽管继续处理包,变量RowCheck显示的值没有任何意义,因为它始终为零,而不管查询返回
编辑3:执行SQL语句的常规选项卡屏幕我也尝试了单行和上述结果集映射:
在执行SQL任务中,尝试将SET NOCOUNT添加到SQL的顶部,可能是行计数干扰了变量赋值,导致变量赋值不为1。是的,我这样做了,但不幸的是,这没有起到作用。我仍然总是得到一个0作为变量值。你能发布一个执行SQL任务属性的常规选项卡的屏幕截图吗?您是否也尝试过使用探查器来验证包执行的SQL是否符合预期?并返回您期望的结果?@TabAlleman我在相应选项卡的上方发布了一张图片。不知道你的意思是什么。我在哪里能找到它?我刚刚在SQLServerStudio中执行了SQL,在那里我得到了预期的结果/值。您在测试中可能错过了很多东西,这些东西只能在发生时被捕获。有时,包或包中的对象似乎被损坏,而销毁和重新创建它们是修复它们的唯一方法。