gpt4 book ai didi

sql-server - Powershell 运行 SQL 作业,延迟,然后运行下一个作业

转载 作者:行者123 更新时间:2023-12-02 18:47:32 27 4
gpt4 key购买 nike

我正在编写一个 Powershell 脚本,它可以使用本地 SQL Server 数据库执行多项操作。

我正在做的一件事是一个接一个地运行多个 SQL 作业。我这样运行它们:

 sqlcmd -S .\ -Q "EXECUTE msdb.dbo.sp_start_job @job_name = 'Rebuild Content Asset Relationship Data'"

有没有办法让 Powershell 延迟运行下一个作业,直到第一个作业完成?

谢谢

最佳答案

要从 PowerShell 访问 SQL 代理作业,您可以使用 SMO:

编辑:考虑到效率,如果您要将此函数添加到脚本中,我会将 SMO 加载出来并将其放置在脚本顶部附近(在此之前)功能)。如果每次调用该函数时都会重新加载程序集,它可能会减慢脚本的速度。


Function Get-SQLJobStatus
{
param ([string]$server, [string]$JobName)
# Load SMO assembly, and if we're running SQL 2008 DLLs load the SMOExtended and SQLWMIManagement libraries
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO') | out-null

# Create object to connect to SQL Instance
$srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" $server

# used to allow piping of more than one job name to function
if($JobName)
{
foreach($j in $jobName)
{
$srv.JobServer.Jobs | where {$_.Name -match $JobName} | Select Name, CurrentRunStatus
}
}
else #display all jobs for the instance
{
$srv.JobServer.Jobs | Select Name, CurrentRunStatus
} #end of Get-SQLJobStatus
}

使用此功能的方法示例:


#will display all jobs on the instance
Get-SQLJobStatus MyServer

#pipe in more than one job to get status
"myJob","myJob2" | foreach {Get-SQLJobStatus -Server MyServer -JobName $_}

#get status of one job
Get-SQLJobStatus -Server MyServer -JobName "MyJob"

您可以在脚本中使用此函数,并在 while 循环或其他内容中重复调用它,直到您的作业状态显示“空闲”。至少在我看来这是可行的:)

关于sql-server - Powershell 运行 SQL 作业,延迟,然后运行下一个作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10195735/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com