自动从 mssql 服务器导出作业和存储过程

自动从 mssql 服务器导出作业和存储过程

我有 MS SQL 服务器,里面有多个作业。有时我和我的同事会更换任务。我想导出作业,比如 在此处输入图片描述自动导出,这样就可以放入 mercurial 并存储作业版本。我也希望在数据库中有类似的存储过程

答案1

一旦您意识到 SSMS 使用 SMO(服务器管理对象)来编写脚本,并且您可以直接通过 powershell 之类的工具自行使用 SMO,这类事情就会变得容易。例​​如,下面是编写服务器上所有作业的脚本(用 powershell 编写):

pushd;
import-module sqlps -disablenamechecking;
popd;

$s = new-object microsoft.sqlserver.management.smo.server 'yourServer';
$db = $s.Databases['yourDatabase'];
foreach ($proc in $db.StoredProcedures | where {$_.IsSystemObject -eq $false}) {
   $proc.script();
}

$a = $s.JobServer;
foreach ($job in $a.Jobs) {
   $job.script();
}

这是最不花哨的版本,因为它会直接将其转储到您的屏幕上。想要更花哨的版本吗?创建一个脚本选项对象并将其传递给script()方法。这应该可以帮助您入门。

答案2

在我的例子中,这个例子没有错误,感谢 Ben Thul:

import-module sqlps -disablenamechecking;

$jobs = Get-ChildItem sql\ServerName\default\jobserver\jobs
foreach ($job in $jobs) {
    Write-host $job.Name #script();
    $job.script()|out-file c:\out\jobs\$job.sql UTF8
}


import-module sqlps -disablenamechecking;

$StoredProcedures = Get-ChildItem sql\ServerName\default\Databases\DatabaseName\StoredProcedures
foreach ($sp in $StoredProcedures) {
    $spname=$sp.Schema+"."+$sp.Name
    Write-host $sp.Name #script();
    $sp.script()|out-file c:\out\sp\$spname.sql UTF8
}

相关内容