仅当我拥有所有必需的表时才启动存储过程

时间:2017-11-08 11:01:45

标签: sql-server stored-procedures

我有一个每月一次的JOB,有3个步骤,每个步骤运行一个不同的SP,当我需要所有信息时,如何让第一个SP开始运行?

ie:我要求表A和表B信息在进入JOB的第2步和第3步之前运行SP1,我该怎么告诉程序?

1 个答案:

答案 0 :(得分:0)

在执行语句之前添加对表A和表B的检查。像这样

IF EXISTS(SELECT 1 FROM tableA) AND EXISTS(SELECT 1 FROM TableB)
BEGIN

 EXEC YourProcedure

END

如果只想在数据库中存在两个表时才运行Execute,请尝试使用

DECLARE @Cnt INT = 0
SELECT @Cnt COUNT(1) FROM sys.objects WHERE Object_Id = OBJECT_ID('tableA')OR Object_Id = OBJECT_ID('tableB')
IF ISNULL(@Cnt,0)=2
        BEGIN

         EXEC YourProcedure

        END

或者如果要循环它直到创建表,那么试试这个

    DECLARE @Cnt INT = 0

WHILE ISNULL(@Cnt,0) <2
BEGIN    

SELECT @Cnt COUNT(1) FROM sys.objects WHERE Object_Id = OBJECT_ID('tableA')OR Object_Id = OBJECT_ID('tableB')

IF ISNULL(@Cnt,0)=2
            BEGIN

             EXEC YourProcedure

            END
END

如果要在特定时间运行过程。然后,您可以在SQL作业或SSIS包中为该特定时间安排它。或者如果你想要检查SQL脚本(不推荐)那么试试这个

WHILE(1)
BEGIN
  IF(SELECT 1 WHERE GETDATE() = 'dd/mm/yyy hh:ss:mm')
  BEGIN
     EXEC YourProcedure
  END
END