Exporta automaticamente trabalhos e procedimentos armazenados do servidor mssql

1

Eu tenho o MS SQL Server com vários trabalhos. Às vezes eu e meus colegas trocamos de tarefa. Eu quero exportar postos de trabalho, como em automaticamente para colocar no mercurial e armazenar a versão de trabalhos. Eu também gostaria de ter uma oportunidade semelhante para procedimentos armazenados no banco de dados

    
por Arty 21.04.2015 / 10:47

2 respostas

2

Uma vez que você perceba que o SSMS está usando o SMO (Server Management Objects) para fazer o script, e que você pode usar o SMO diretamente através de algo como o powershell, esse tipo de coisa fica fácil. Por exemplo, aqui está o script de todos os trabalhos no seu servidor (escrito em 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();
}

Esta é a versão menos sofisticada, pois a envia diretamente para a tela. Quer mais chique? Crie um objeto ScriptingOptions e passe-o para o script() método. Isso deve te ajudar a começar.

    
por 24.04.2015 / 02:00
0

No meu caso, este exemplo funcionou sem erros, obrigado 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
}
    
por 24.04.2015 / 11:32