Azure自动化Powershell脚本-它们会像SQL代理作业一样线性运行吗?

Azure自动化Powershell脚本-它们会像SQL代理作业一样线性运行吗?,powershell,azure,azure-sql-database,azure-automation,Powershell,Azure,Azure Sql Database,Azure Automation,我正在使用Azure Automation替换我的SQL Server代理作业,而且我对Powershell脚本编写还不熟悉。我的问题是,创建一个包含多个查询和存储过程执行的脚本是否会等待一个任务完成后再执行下一个任务。在SQL代理作业中,您可以定义每个步骤,然后指示它等待该步骤的成功,然后在此处输入代码继续下一步 例如,给定此Powershell脚本: workflow SyncDataFromTransfer { Write-Output "JOB ST

我正在使用Azure Automation替换我的SQL Server代理作业,而且我对Powershell脚本编写还不熟悉。我的问题是,创建一个包含多个查询和存储过程执行的脚本是否会等待一个任务完成后再执行下一个任务。在SQL代理作业中,您可以定义每个步骤,然后指示它等待该步骤的成功,然后在此处输入代码继续下一步

例如,给定此Powershell脚本:

    workflow SyncDataFromTransfer
    {   
        Write-Output "JOB START BEFORE INLINESCRIPT"

        inlinescript
        {
            Write-Output "JOB START"
            # Create connection to Master DB
            $MasterDatabaseConnection = New-Object System.Data.SqlClient.SqlConnection
            $MasterDatabaseConnection.ConnectionString = "Data Source=Azure SQL Server;Initial Catalog=SearchDb;Integrated Security=False;User ID=user;Password=password;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False"
            $MasterDatabaseConnection.Open()

            Write-Output "CONNECTION OPEN"

            # Create command
            $MasterDatabaseCommand = New-Object System.Data.SqlClient.SqlCommand
            $MasterDatabaseCommand.Connection = $MasterDatabaseConnection
            $MasterDatabaseCommand.CommandTimeout=0
            $MasterDatabaseCommand.CommandText = "DELETE FROM [SearchDb].IdData
            WHERE TaskId = 1000"

            # Execute the query
            $MasterDatabaseCommand.ExecuteNonQuery()



            # Close connection to Master DB
            $MasterDatabaseConnection.Close() 

            Write-Output "CONNECTION CLOSED"
        }    
        Write-Output "WORK END - AFTER INLINESCRIPT"

}

问题是,如果我直接在“
$MasterDatabaseCommand.ExecuteNonQuery()
”行之后添加了第二个查询,脚本会在运行第二个查询之前等待第一个查询成功完成吗

如果您想要这种行为,为什么要使用
工作流
?它的主要优势之一是并行工作。无论如何,根据您的示例,事情将按顺序执行。您可以通过将命令更改为waits并使用Profiler来测试这一点,例如

$MasterDatabaseCommand.CommandText = "WAITFOR DELAY '00:00:01"

# Execute the query
$MasterDatabaseCommand.ExecuteNonQuery()


$MasterDatabaseCommand.CommandText = "WAITFOR DELAY '00:00:02"

# Execute the query
$MasterDatabaseCommand.ExecuteNonQuery()

如果你真的想强制这个行为,你应该考虑使用一个存储过程并按顺序执行你的语句。


注意:在您的示例中,您的模式名称和数据库名称是相同的-键入?

至于您的第一个问题,我还是PS脚本新手,所以我使用工作流,因为它似乎是正确的解决方案。请务必让我知道使用其他选项是否更有意义。至于您对存储过程的建议,这当然是可行的,但我的问题是。我需要运行的第一个存储过程可能需要4小时才能完成。脚本是否会在执行下一个命令之前等待4个小时以成功完成,而我没有显式地编写额外的代码来告诉它等待?是的,它将等待;因为您没有使用任何
…Async
方法和/或没有多次调用主方法
SyncDataFromTransfer
。试试我的等待方法,自己看看:)我一定会的,我非常感谢你的帮助。今天我将对此进行测试,并假设它按预期工作,我将把它标记为答案。再次感谢。