我有MS SQL服务器与几个工作。 有时我和同事改变任务。 我想出口工作,比如说
automaticaly,以便投入mercurial和存储版本的工作。 我也想在数据库中有类似的存储过程的机会
一旦你意识到SSMS正在使用SMO(服务器pipe理对象)来执行脚本,并且你可以直接通过类似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(); }
这是最不花哨的版本,它直接转到屏幕上。 想要发烧友? 创build一个ScriptingOptions对象并将其传递给script()方法。 这应该让你开始。
在我的例子中,这个例子没有错误,谢谢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 }