sp_add_jobstep (Transact-SQL)
Si applica a: SQL Server Istanza gestita di SQL di Azure
Aggiunge un passaggio (operazione) a un processo di SQL Server Agent.
Convenzioni relative alla sintassi Transact-SQL
Importante
Nella maggior parte dei Istanza gestita di SQL di Azure, ma non tutti i tipi di processo di SQL Server Agent sono supportati. Per informazioni dettagliate, vedere Differenze T-SQL tra Istanza gestita di SQL di Azure e SQL Server.
Sintassi
sp_add_jobstep
[ [ @job_id = ] 'job_id' ]
[ , [ @job_name = ] N'job_name' ]
[ , [ @step_id = ] step_id ]
, [ @step_name = ] N'step_name'
[ , [ @subsystem = ] N'subsystem' ]
[ , [ @command = ] N'command' ]
[ , [ @additional_parameters = ] N'additional_parameters' ]
[ , [ @cmdexec_success_code = ] cmdexec_success_code ]
[ , [ @on_success_action = ] on_success_action ]
[ , [ @on_success_step_id = ] on_success_step_id ]
[ , [ @on_fail_action = ] on_fail_action ]
[ , [ @on_fail_step_id = ] on_fail_step_id ]
[ , [ @server = ] N'server' ]
[ , [ @database_name = ] N'database_name' ]
[ , [ @database_user_name = ] N'database_user_name' ]
[ , [ @retry_attempts = ] retry_attempts ]
[ , [ @retry_interval = ] retry_interval ]
[ , [ @os_run_priority = ] os_run_priority ]
[ , [ @output_file_name = ] N'output_file_name' ]
[ , [ @flags = ] flags ]
[ , [ @proxy_id = ] proxy_id ]
[ , [ @proxy_name = ] N'proxy_name' ]
[ , [ @step_uid = ] 'step_uid' OUTPUT ]
[ ; ]
Argomenti
[ @job_id = ] 'job_id'
Numero di identificazione del processo a cui aggiungere il passaggio. @job_id è uniqueidentifier, con un valore predefinito .NULL
È necessario specificare @job_id o @job_name , ma non è possibile specificare entrambi.
[ @job_name = ] N'job_name'
Nome del processo a cui aggiungere il passaggio. @job_name è sysname, con il valore predefinito NULL
.
È necessario specificare @job_id o @job_name , ma non è possibile specificare entrambi.
[ @step_id = ] step_id
Numero di identificazione sequenziale per il passaggio del processo. @step_id è int, con il valore predefinito NULL
. I numeri di identificazione dei passaggi iniziano in corrispondenza 1
e aumentano senza lacune. Se viene inserito un passaggio nella sequenza esistente, i numeri di sequenza vengono automaticamente adeguati. Se non viene specificato @step_id, viene specificato un valore.
[ @step_name = ] N'step_name'
Nome del passaggio. @step_name è sysname, senza impostazione predefinita.
[ @subsystem = ] N'subsystem'
Sottosistema usato dal servizio SQL Server Agent per eseguire @command. @subsystem è nvarchar(40)e può essere uno di questi valori.
valore | Descrizione |
---|---|
ActiveScripting |
Script ActiveX Importante: questa funzionalità verrà rimossa in una versione futura di SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. |
CmdExec |
Comando del sistema operativo o programma eseguibile |
Distribution |
Processo di Agente distribuzione repliche |
Snapshot |
Processo di Agente snapshot repliche |
LogReader |
Processo di Agente lettura log repliche |
Merge |
Processo di Agente merge repliche |
QueueReader |
Processo di Agente di lettura coda repliche |
ANALYSISQUERY |
Analysis Services query (MDX, DMX) |
ANALYSISCOMMAND |
Comando Analysis Services (XMLA) |
SSIS |
Esecuzione di pacchetti di Integration Services |
PowerShell |
Script di PowerShell |
TSQL (predefinito) |
Istruzione Transact-SQL |
[ @command = ] N'command'
Comandi da eseguire dal servizio SQL Server Agent tramite @subsystem. @command è nvarchar(max), con un valore predefinito .NULL
SQL Server Agent offre la sostituzione dei token, che offre la stessa flessibilità offerta dalle variabili durante la scrittura di programmi software.
Una macro di escape deve accompagnare tutti i token usati nei passaggi del processo oppure i passaggi di processo hanno esito negativo. È ora necessario inoltre racchiudere tra parentesi i nomi dei token e inserire il simbolo di dollaro ($
) all'inizio della sintassi del token, Ad esempio: $(ESCAPE_<macro name>(DATE))
.
Per altre informazioni su questi token e sull'aggiornamento dei passaggi del processo per usare la nuova sintassi del token, vedere Use Tokens in Job Steps.For more information about these tokens and updating your job steps to use the new token syntax, see Use Tokens in Job Steps.For more information about these tokens and updating your job steps to use the new token syntax, see Use Tokens in Job
Qualsiasi utente di Windows con autorizzazioni di scrittura per il registro eventi di Windows può accedere ai passaggi di processo attivati dagli avvisi di SQL Server Agent o di WMI. Per evitare rischi per la sicurezza, i token di SQL Server Agent che possono essere usati in processi attivati dagli avvisi sono disabilitati per impostazione predefinita. Questi token sono: A-DBN
, A-SVR
, A-ERR
A-SEV
, , A-MSG
e WMI(<property>)
. In questa versione l'utilizzo dei token è esteso a tutti gli avvisi.
Se è necessario usare questi token, verificare innanzitutto che solo i membri di gruppi di sicurezza di Windows attendibili, ad esempio il gruppo Administrators, dispongano delle autorizzazioni di scrittura per il registro eventi del computer in cui è installato SQL Server. A questo punto, fare clic con il pulsante destro del mouse su SQL Server Agent in Esplora oggetti, scegliere Proprietàe nella pagina Sistema avvisi selezionare Sostituisci token per tutte le risposte del processo ad avvisi per abilitare questi token.
[ @additional_parameters = ] N'additional_parameters'
Identificato solo a scopo informativo. Non supportato. Non è garantita la compatibilità con le versioni future.
[ @cmdexec_success_code = ] cmdexec_success_code
Valore restituito da un CmdExec
comando del sottosistema per indicare che @command eseguito correttamente. @cmdexec_success_code è int, con il valore predefinito 0
.
[ @on_success_action = ] on_success_action
Azione da eseguire se il passaggio ha esito positivo. @on_success_action è tinyint e può essere uno di questi valori.
Valore | Descrizione (azione) |
---|---|
1 (predefinito) |
Uscita in caso di esito positivo |
2 |
Uscita in caso di esito negativo |
3 |
Esecuzione del passaggio successivo |
4 |
Andare al passaggio @on_success_step_id |
[ @on_success_step_id = ] on_success_step_id
ID del passaggio di questo processo da eseguire se il passaggio ha esito positivo e @on_success_action è 4
. @on_success_step_id è int, con il valore predefinito .0
[ @on_fail_action = ] on_fail_action
Azione da eseguire se il passaggio non viene completato correttamente. @on_fail_action è tinyint e può essere uno di questi valori.
Valore | Descrizione (azione) |
---|---|
1 |
Uscita in caso di esito positivo |
2 (predefinito) |
Uscita in caso di esito negativo |
3 |
Esecuzione del passaggio successivo |
4 |
Andare al passaggio @on_fail_step_id |
[ @on_fail_step_id = ] on_fail_step_id
ID del passaggio da eseguire se il passaggio ha esito negativo e @on_fail_action è 4
. @on_fail_step_id è int, con il valore predefinito 0
.
[ @server = ] N'server'
Identificato solo a scopo informativo. Non supportato. Non è garantita la compatibilità con le versioni future.
[ @database_name = ] N'database_name'
Nome del database in cui eseguire un passaggio Transact-SQL. @database_name è sysname, con un valore predefinito , NULL
nel qual caso viene usato il master
database. I nomi racchiusi tra parentesi quadre ([]
) non sono consentiti. Per un passaggio del processo ActiveX, il @database_name è il nome del linguaggio di scripting usato dal passaggio.
[ @database_user_name = ] N'database_user_name'
Nome dell'account utente da usare durante l'esecuzione di un passaggio Transact-SQL. @database_user_name è sysname, con un valore predefinito .NULL
Quando @database_user_name è NULL
, il passaggio viene eseguito nel contesto utente del proprietario del processo in @database_name. SQL Server Agent include questo parametro solo se il proprietario del processo è un sysadmin di SQL Server. In tal caso, il passaggio Transact-SQL specificato viene eseguito nel contesto del nome utente di SQL Server specificato. Se il proprietario del processo non è un sysadmin di SQL Server, il passaggio Transact-SQL viene sempre eseguito nel contesto dell'account di accesso proprietario di questo processo e il parametro @database_user_name viene ignorato.
[ @retry_attempts = ] retry_attempts
Numero di tentativi da eseguire in caso di esecuzione errata del passaggio. @retry_attempts è int, con un valore predefinito 0
, che indica che non viene eseguito alcun tentativo.
[ @retry_interval = ] retry_interval
Numero di minuti che devono trascorrere tra i tentativi. @retry_interval è int, con un valore predefinito 0
, che indica un 0
intervallo di minuti.
[ @os_run_priority = ] os_run_priority
Identificato solo a scopo informativo. Non supportato. Non è garantita la compatibilità con le versioni future.
[ @output_file_name = ] N'output_file_name'
Nome del file in cui salvare l'output del passaggio. @output_file_name è nvarchar(200), con il valore predefinito NULL
. @output_file_name può includere uno o più token elencati in @command. Questo parametro è valido solo con i comandi in esecuzione nei sottosistemi Transact-SQL, CmdExec
, , PowerShell
Integration Services o Analysis Services.
[ @flags = ] flag
Opzione che consente di controllare il comportamento. @flags è int e può essere uno di questi valori.
valore | Descrizione |
---|---|
0 (predefinito) |
Il file di output viene sovrascritto |
2 |
L'output viene aggiunto alla fine del file di output. |
4 |
L'output del passaggio del processo Transact-SQL viene scritto nella cronologia dei passaggi |
8 |
Il log viene scritto nella tabella. La cronologia esistente viene sovrascritta |
16 |
Il log viene scritto nella tabella in aggiunta alla cronologia esistente |
32 |
Tutto l'output viene scritto nella cronologia processo |
64 |
Creare un evento di Windows da usare come segnale per il passaggio del processo per interrompere l'interruzione cmd |
[ @proxy_id = ] proxy_id
ID del proxy in base al quale viene eseguito il passaggio del processo. @proxy_id è int, con il valore predefinito NULL
. Se non viene specificato alcun @proxy_id , non viene specificato alcun @proxy_name e non viene specificato alcun @database_user_name , il passaggio del processo viene eseguito come account del servizio per SQL Server Agent.
[ @proxy_name = ] N'proxy_name'
Nome del proxy in base al quale viene eseguito il passaggio del processo. @proxy_name è sysname, con il valore predefinito NULL
. Se non viene specificato alcun @proxy_id , non viene specificato alcun @proxy_name e non viene specificato alcun @database_user_name , il passaggio del processo viene eseguito come account del servizio per SQL Server Agent.
[ @step_uid = ] OUTPUT 'step_uid'
@step_uid è un parametro OUTPUT di tipo uniqueidentifier.
Valori del codice restituito
0
(esito positivo) o 1
(errore).
Set di risultati
Nessuno.
Osservazioni:
sp_add_jobstep
deve essere eseguito dal msdb
database.
SQL Server Management Studio include un semplice strumento grafico per la gestione dei processi ed è lo strumento consigliato per la creazione e gestione dell'infrastruttura dei processi.
Per impostazione predefinita, un passaggio del processo viene eseguito come account del servizio per SQL Server Agent, a meno che non venga specificato un altro proxy. Un requisito di questo account deve essere membro del ruolo predefinito di sicurezza sysadmin .
Un proxy può essere identificato da @proxy_name o @proxy_id.
Questa stored procedure condivide il nome di con un oggetto simile per il servizio Processi elastici di sp_add_jobstep
Azure per database SQL di Azure. Per informazioni sulla versione dei processi elastici, vedere jobs.sp_add_jobstep (processi elastici di Azure).
Autorizzazioni
È possibile concedere EXECUTE
autorizzazioni per questa procedura, ma queste autorizzazioni potrebbero essere sottoposte a override durante un aggiornamento di SQL Server.
È necessario concedere ad altri utenti uno dei ruoli predefiniti del database di SQL Server Agent seguenti:msdb
- SQLAgentUserRole
- SQLAgentReaderRole
- SQLAgentOperatorRole
Per informazioni dettagliate sulle autorizzazioni di questi ruoli, vedere Ruoli di database predefiniti di SQL Server Agent.
L'autore del passaggio del processo deve avere accesso al proxy per il passaggio del processo. I membri del ruolo predefinito del server sysadmin hanno accesso a tutti i proxy. Per quanto riguarda gli altri utenti, è necessario concedere esplicitamente l'accesso a un proxy.
Esempi
Nell'esempio seguente viene creato un passaggio di processo che modifica l'accesso al database impostando la modalità sola lettura per il database Sales. In questo esempio vengono inoltre specificati cinque tentativi, con ogni tentativo di esecuzione dopo un'attesa di 5 minuti.
Nota
In questo esempio si presuppone che il processo Weekly Sales Data Backup
esista già.
USE msdb;
GO
EXEC sp_add_jobstep
@job_name = N'Weekly Sales Data Backup',
@step_name = N'Set database to read only',
@subsystem = N'TSQL',
@command = N'ALTER DATABASE SALES SET READ_ONLY',
@retry_attempts = 5,
@retry_interval = 5;
GO