Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssis 如何停止基于存储过程输出的包执行?_Ssis_Control Flow - Fatal编程技术网

Ssis 如何停止基于存储过程输出的包执行?

Ssis 如何停止基于存储过程输出的包执行?,ssis,control-flow,Ssis,Control Flow,我有一个SSIS包,第一个任务执行一个存储过程来验证运行日期不是假日。如果是假日,则返回一个计数为1的记录集 如果recordcount为1,我希望能够停止SSI,但如果recordcount为零,则继续运行。我不知道最好的方法来实现这一点。我应该向包中添加什么控制流项 我对SSIS比较陌生,所以我不知道要添加什么项目。任何帮助都会很好。这里有一个可能的选项,可以为您提供实现这一目标的想法。该示例通过检查包含假日列表的表来检查今天的日期是否为假日。仅当今天的日期不是假日时,才会执行其余的包任务。

我有一个SSIS包,第一个任务执行一个存储过程来验证运行日期不是假日。如果是假日,则返回一个计数为1的记录集

如果recordcount为1,我希望能够停止SSI,但如果recordcount为零,则继续运行。我不知道最好的方法来实现这一点。我应该向包中添加什么控制流项


我对SSIS比较陌生,所以我不知道要添加什么项目。任何帮助都会很好。

这里有一个可能的选项,可以为您提供实现这一目标的想法。该示例通过检查包含假日列表的表来检查今天的日期是否为假日。仅当今天的日期不是假日时,才会执行其余的包任务。该示例使用
SSIS 2008 R2
SQL Server 2008 R2
数据库

逐步过程:

CREATE TABLE [dbo].[Holidays](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [HolidayDate] [datetime] NULL,
 CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY]
GO

CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
AS
BEGIN

    SET NOCOUNT ON

    SELECT  HolidayDate
    FROM    dbo.Holidays
    WHERE   DATEDIFF(DAY, HolidayDate, GETDATE()) = 0   
END
GO
  • 使用SQL脚本部分给出的脚本创建名为
    dbo.Holidays
    的表和名为
    dbo.CheckTodayIsHoliday
    的存储过程。填充表格,如屏幕截图#1所示

  • 在SSIS包上,创建名为
    RecordCount
    SQLProcedure
    的两个变量。用屏幕截图2所示的值填充它们。另外,创建OLE DB连接以连接到SQL Server数据库。在本例中,我将其命名为SQLServer。请参阅屏幕截图#3。该示例使用数据源而不是普通连接。这就是为什么图标在屏幕截图中有所不同

  • 在SSIS包上,放置
    数据流任务
    ,并在数据流任务中放置
    OLE DB源
    行计数转换
    。请参阅屏幕截图#4

  • 配置OLE DB源代码,如屏幕截图5和6所示。这将执行存储过程并获取结果

  • 配置
    行计数转换
    ,如屏幕截图7所示

  • 控制流
    上,我又放置了几个虚拟任务,如屏幕截图#8所示

  • 右键单击数据流任务和下一个任务(序列容器)之间的连接器,如屏幕截图#9所示

  • 配置
    优先约束编辑器
    ,如屏幕截图10所示

  • 屏幕截图35;11显示了包的执行情况,日期(
    2011年6月16日
    )显示在
    dbo.Holidays
    表中,标记为holiday。当然,2011年6月16日不是我工作的假期,除非我休假

  • 更改表格数据,如屏幕截图#12所示

  • 屏幕截图#13显示了包执行的日期(
    2011年6月16日)未出现在
    dbo.Holidays
    表中

  • 希望有帮助

    SQL脚本:

    CREATE TABLE [dbo].[Holidays](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [HolidayDate] [datetime] NULL,
     CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
    ) ON [PRIMARY]
    GO
    
    CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
    AS
    BEGIN
    
        SET NOCOUNT ON
    
        SELECT  HolidayDate
        FROM    dbo.Holidays
        WHERE   DATEDIFF(DAY, HolidayDate, GETDATE()) = 0   
    END
    GO
    
    屏幕截图#1:

    CREATE TABLE [dbo].[Holidays](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [HolidayDate] [datetime] NULL,
     CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
    ) ON [PRIMARY]
    GO
    
    CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
    AS
    BEGIN
    
        SET NOCOUNT ON
    
        SELECT  HolidayDate
        FROM    dbo.Holidays
        WHERE   DATEDIFF(DAY, HolidayDate, GETDATE()) = 0   
    END
    GO
    

    截图#2:

    CREATE TABLE [dbo].[Holidays](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [HolidayDate] [datetime] NULL,
     CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
    ) ON [PRIMARY]
    GO
    
    CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
    AS
    BEGIN
    
        SET NOCOUNT ON
    
        SELECT  HolidayDate
        FROM    dbo.Holidays
        WHERE   DATEDIFF(DAY, HolidayDate, GETDATE()) = 0   
    END
    GO
    

    屏幕截图#3:

    CREATE TABLE [dbo].[Holidays](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [HolidayDate] [datetime] NULL,
     CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
    ) ON [PRIMARY]
    GO
    
    CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
    AS
    BEGIN
    
        SET NOCOUNT ON
    
        SELECT  HolidayDate
        FROM    dbo.Holidays
        WHERE   DATEDIFF(DAY, HolidayDate, GETDATE()) = 0   
    END
    GO
    

    屏幕截图#4:

    CREATE TABLE [dbo].[Holidays](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [HolidayDate] [datetime] NULL,
     CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
    ) ON [PRIMARY]
    GO
    
    CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
    AS
    BEGIN
    
        SET NOCOUNT ON
    
        SELECT  HolidayDate
        FROM    dbo.Holidays
        WHERE   DATEDIFF(DAY, HolidayDate, GETDATE()) = 0   
    END
    GO
    

    屏幕截图#5:

    CREATE TABLE [dbo].[Holidays](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [HolidayDate] [datetime] NULL,
     CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
    ) ON [PRIMARY]
    GO
    
    CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
    AS
    BEGIN
    
        SET NOCOUNT ON
    
        SELECT  HolidayDate
        FROM    dbo.Holidays
        WHERE   DATEDIFF(DAY, HolidayDate, GETDATE()) = 0   
    END
    GO
    

    屏幕截图#6:

    CREATE TABLE [dbo].[Holidays](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [HolidayDate] [datetime] NULL,
     CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
    ) ON [PRIMARY]
    GO
    
    CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
    AS
    BEGIN
    
        SET NOCOUNT ON
    
        SELECT  HolidayDate
        FROM    dbo.Holidays
        WHERE   DATEDIFF(DAY, HolidayDate, GETDATE()) = 0   
    END
    GO
    

    截图#7:

    CREATE TABLE [dbo].[Holidays](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [HolidayDate] [datetime] NULL,
     CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
    ) ON [PRIMARY]
    GO
    
    CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
    AS
    BEGIN
    
        SET NOCOUNT ON
    
        SELECT  HolidayDate
        FROM    dbo.Holidays
        WHERE   DATEDIFF(DAY, HolidayDate, GETDATE()) = 0   
    END
    GO
    

    截图#8:

    CREATE TABLE [dbo].[Holidays](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [HolidayDate] [datetime] NULL,
     CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
    ) ON [PRIMARY]
    GO
    
    CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
    AS
    BEGIN
    
        SET NOCOUNT ON
    
        SELECT  HolidayDate
        FROM    dbo.Holidays
        WHERE   DATEDIFF(DAY, HolidayDate, GETDATE()) = 0   
    END
    GO
    

    截图#9:

    CREATE TABLE [dbo].[Holidays](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [HolidayDate] [datetime] NULL,
     CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
    ) ON [PRIMARY]
    GO
    
    CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
    AS
    BEGIN
    
        SET NOCOUNT ON
    
        SELECT  HolidayDate
        FROM    dbo.Holidays
        WHERE   DATEDIFF(DAY, HolidayDate, GETDATE()) = 0   
    END
    GO
    

    截图#10:

    CREATE TABLE [dbo].[Holidays](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [HolidayDate] [datetime] NULL,
     CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
    ) ON [PRIMARY]
    GO
    
    CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
    AS
    BEGIN
    
        SET NOCOUNT ON
    
        SELECT  HolidayDate
        FROM    dbo.Holidays
        WHERE   DATEDIFF(DAY, HolidayDate, GETDATE()) = 0   
    END
    GO
    

    截图#11:

    CREATE TABLE [dbo].[Holidays](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [HolidayDate] [datetime] NULL,
     CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
    ) ON [PRIMARY]
    GO
    
    CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
    AS
    BEGIN
    
        SET NOCOUNT ON
    
        SELECT  HolidayDate
        FROM    dbo.Holidays
        WHERE   DATEDIFF(DAY, HolidayDate, GETDATE()) = 0   
    END
    GO
    

    截图#12:

    CREATE TABLE [dbo].[Holidays](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [HolidayDate] [datetime] NULL,
     CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
    ) ON [PRIMARY]
    GO
    
    CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
    AS
    BEGIN
    
        SET NOCOUNT ON
    
        SELECT  HolidayDate
        FROM    dbo.Holidays
        WHERE   DATEDIFF(DAY, HolidayDate, GETDATE()) = 0   
    END
    GO
    

    截图#13:

    CREATE TABLE [dbo].[Holidays](
        [Id] [int] IDENTITY(1,1) NOT NULL,
        [HolidayDate] [datetime] NULL,
     CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
    ) ON [PRIMARY]
    GO
    
    CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
    AS
    BEGIN
    
        SET NOCOUNT ON
    
        SELECT  HolidayDate
        FROM    dbo.Holidays
        WHERE   DATEDIFF(DAY, HolidayDate, GETDATE()) = 0   
    END
    GO
    

    一种方法是创建一个执行SQl任务,用于设置变量@Holiday的值。然后,通过右键单击绿线本身并单击编辑,将执行SQl任务的成功流程线同时更改为成功和约束。选择“表达式和约束”作为求值操作,然后为表达式添加一个表达式,如下所示:

    @Holiday == 0