Condividi tramite


jobs.sp_add_jobstep (processi elastici di Azure) (Transact-SQL)

Si applica a: Database SQL di Azure

Aggiunge un passaggio a un processo esistente nel servizio Processi elastici di Azure per database SQL di Azure. Usare jobs.sp_update_jobstep per modificare i passaggi dei processi elastici esistenti.

Questa stored procedure condivide il nome di sp_add_jobstep con un oggetto simile in SQL Server per il servizio SQL Server Agent. Per informazioni sulla versione di SQL Server Agent, vedere sp_add_jobstep.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

[jobs].sp_add_jobstep [ @job_name = ] 'job_name'
     [ , [ @step_id = ] step_id ]
     [ , [ @step_name = ] step_name ]
     [ , [ @command_type = ] 'command_type' ]
     [ , [ @command_source = ] 'command_source' ]
     , [ @command = ] 'command'
     [ , [ @credential_name = ] 'credential_name' ]
     , [ @target_group_name = ] 'target_group_name'
     [ , [ @initial_retry_interval_seconds = ] initial_retry_interval_seconds ]
     [ , [ @maximum_retry_interval_seconds = ] maximum_retry_interval_seconds ]
     [ , [ @retry_interval_backoff_multiplier = ] retry_interval_backoff_multiplier ]
     [ , [ @retry_attempts = ] retry_attempts ]
     [ , [ @step_timeout_seconds = ] step_timeout_seconds ]
     [ , [ @output_type = ] 'output_type' ]
     [ , [ @output_credential_name = ] 'output_credential_name' ]
     [ , [ @output_subscription_id = ] 'output_subscription_id' ]
     [ , [ @output_resource_group_name = ] 'output_resource_group_name' ]
     [ , [ @output_server_name = ] 'output_server_name' ]
     [ , [ @output_database_name = ] 'output_database_name' ]
     [ , [ @output_schema_name = ] 'output_schema_name' ]
     [ , [ @output_table_name = ] 'output_table_name' ]
     [ , [ @job_version = ] job_version OUTPUT ]
     [ , [ @max_parallelism = ] max_parallelism ]

Argomenti

@job_name

Nome del processo a cui aggiungere il passaggio. job_name è nvarchar(128).

@step_id

Numero di identificazione sequenziale per il passaggio del processo. I numeri di identificazione dei passaggi iniziano da 1 e vengono incrementati senza interruzioni. Se un passaggio esistente ha già questo ID, tale passaggio e tutti i passaggi seguenti avranno gli ID incrementati in modo che questo nuovo passaggio possa essere inserito nella sequenza. Se non specificato, il step_id verrà assegnato automaticamente all'ultimo nella sequenza di passaggi. step_id è un valore int.

@step_name

Nome del passaggio. Deve essere specificato, ad eccezione del primo passaggio di un processo che (per praticità) ha un nome predefinito .JobStep step_name è nvarchar(128).

@command_type

Tipo di comando eseguito da questo passaggio del processo. command_type è nvarchar(50), con un valore predefinito , TSqlovvero il valore del parametro @command_type è uno script T-SQL.

Se specificato, il valore deve essere TSql.

@command_source

Tipo di posizione in cui è archiviato il comando. command_source è nvarchar(50), con un valore predefinito , Inlineovvero il valore del parametro @command è il testo letterale del comando.

Se specificato, il valore deve essere Inline.

@command

Script T-SQL valido che deve essere eseguito da questo passaggio del processo. il comando è nvarchar(max), con un valore predefinito .NULL

@credential_name

Nome delle credenziali con ambito database archiviate in questo database di controllo del processo utilizzato per connettersi a ognuno dei database di destinazione all'interno del gruppo di destinazione quando questo passaggio viene eseguito. credential_name è nvarchar(128).

Quando si usa l'autenticazione di Microsoft Entra (in precedenza Azure Active Directory), omettere il parametro @credential_name , che deve essere fornito solo quando si usano credenziali con ambito database.

@target_group_name

Nome del gruppo di destinazione contenente i database di destinazione su cui verrà eseguito il passaggio del processo. target_group_name è nvarchar(128).

@initial_retry_interval_seconds

Ritardo prima del primo tentativo, se il passaggio del processo non riesce durante il tentativo di esecuzione iniziale. initial_retry_interval_seconds è int, con il valore predefinito 1.

@maximum_retry_interval_seconds

Ritardo massimo tra i tentativi. Se il ritardo tra i tentativi aumenta di dimensioni maggiori rispetto a questo valore, viene invece limitato a questo valore. maximum_retry_interval_seconds è int, con il valore predefinito 120.

@retry_interval_backoff_multiplier

Moltiplicatore da applicare al ritardo tra i tentativi se più tentativi di esecuzione del passaggio del processo hanno esito negativo. Ad esempio, se il primo tentativo ha un ritardo di 5 secondi e il moltiplicatore di backoff è 2.0, il secondo tentativo avrà un ritardo di 10 e il terzo un ritardo di 20 secondi. retry_interval_backoff_multiplier è il tipo di dati reale, con valore predefinito 2,0.

@retry_attempts

Numero di tentativi di esecuzione se il tentativo iniziale non riesce. Ad esempio, se il valore retry_attempts è 10, verranno eseguiti 1 tentativo iniziale e 10 tentativi, dando un totale di 11 tentativi. Se il tentativo di ripetizione finale ha esito negativo, l'esecuzione del processo terminerà con un lifecycle oggetto registrato Failed in jobs.job_executions. retry_attempts è int, con il valore predefinito 10.

@step_timeout_seconds

Tempo massimo consentito per l'esecuzione del passaggio. Se questa volta viene superata, l'esecuzione del processo terminerà con un lifecycle di TimedOut registrato in jobs.job_executions. step_timeout_seconds è int, con valore predefinito di 43.200 secondi (12 ore).

@output_type

In caso contrarioNULL, il tipo di destinazione in cui viene scritto il primo set di risultati del comando. output_type è nvarchar(50), con il valore predefinito NULL.

Se specificato, il valore deve essere SqlDatabase.

@output_credential_name

Se non è Null, il nome delle credenziali con ambito database utilizzate per connettersi al database di destinazione di output. Deve essere specificato se output_type è uguale a SqlDatabase. output_credential_name è nvarchar(128), con un valore predefinito .NULL

Quando si usa l'autenticazione di Microsoft Entra (in precedenza Azure Active Directory), omettere il parametro @output_credential_name , che deve essere fornito solo quando si usano credenziali con ambito database.

@output_subscription_id

ID sottoscrizione di Azure da usare per l'output. L'impostazione predefinita è la sottoscrizione dell'agente processo. output_subscription_id è un uniqueidentifier.

@output_resource_group_name

Nome del gruppo di risorse in cui risiede il database di output. L'impostazione predefinita è il gruppo di risorse dell'agente di processo. output_resource_group_name è nvarchar(128).

@output_server_name

In caso contrario NULL, il nome DNS completo del server che contiene il database di destinazione di output, ad esempio : @output_server_name = 'server1.database.windows.net'. Deve essere specificato se output_type è uguale a SqlDatabase. output_server_name è nvarchar(256), con il valore predefinito NULL.

@output_database_name

Se non NULLè , il nome del database che contiene la tabella di destinazione di output. Deve essere specificato se output_type è uguale a SqlDatabase. output_database_name è nvarchar(128), con il valore predefinito NULL.

@output_schema_name

Se non NULLè , il nome dello schema SQL che contiene la tabella di destinazione di output. Se output_type è uguale SqlDatabasea , il valore predefinito è dbo . output_schema_name è nvarchar(128).

@output_table_name

In caso contrario NULL, il nome della tabella in cui verrà scritto il primo set di risultati del comando. Se la tabella non esiste già, verrà creata in base allo schema del set di risultati restituito. Deve essere specificato se output_type è uguale a SqlDatabase. output_table_name è nvarchar(128), con un valore predefinito .NULL

Se si specifica un output_table_name, alle credenziali dell'agente di processo o con ambito database devono essere concesse le autorizzazioni necessarie per i dati CREATE TABLE e INSERT nella tabella.

@job_version PRODOTTO

Parametro di output che verrà assegnato al nuovo numero di versione del processo. job_version è int.

@max_parallelism PRODOTTO

Livello massimo di parallelismo per ogni pool elastico.

Se impostato, il passaggio del processo sarà limitato in modo da eseguire solo il numero massimo di database per ogni pool elastico. Questo vale per ogni pool elastico incluso direttamente nel gruppo di destinazione o per i pool elastici all'interno di un server incluso nel gruppo di destinazione. max_parallelism è int.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Osservazioni:

Quando sp_add_jobstep ha esito positivo, il numero di versione corrente del processo viene incrementato. Alla successiva esecuzione del processo, verrà usata la nuova versione. Se il processo è in esecuzione, l'esecuzione non conterrà il nuovo passaggio.

  • Quando si usa l'autenticazione di Microsoft Entra per eseguire l'autenticazione nei server di destinazione/database, gli argomenti @credential_name e @output_credential_name non devono essere forniti per sp_add_jobstep o sp_update_jobstep.
  • Quando si usano credenziali con ambito database per eseguire l'autenticazione nel/i server/database di destinazione, è necessario il parametro @credential_name per sp_add_jobstep e sp_update_jobstep. Ad esempio: @credential_name = 'job_credential'.

Autorizzazioni

Per impostazione predefinita, questa stored procedure può essere eseguita dai membri del ruolo predefinito del server sysadmin . Solo i membri del ruolo sysadmin possono usare questa stored procedure per modificare gli attributi dei processi di proprietà di altri utenti.

Esempi

Creare un passaggio del processo per eseguire un'istruzione T-SQL

L'esempio seguente illustra come creare un processo elastico per eseguire un'istruzione T-SQL in un processo elastico. Nell'esempio seguente viene jobs.sp_add_jobstep usato per creare un passaggio di processo nel processo denominato CreateTableTest, da eseguire nel gruppo PoolGroupdi destinazione .

Connettersi al database job_database ed eseguire il comando seguente:

--Connect to the job database specified when creating the job agent

--Add job for create table
EXEC jobs.sp_add_job @job_name = 'CreateTableTest', @description = 'Create Table Test';

-- Add job step for create table
EXEC jobs.sp_add_jobstep @job_name = 'CreateTableTest',
@command = N'IF NOT EXISTS (SELECT * FROM sys.tables WHERE object_id = object_id(''Test''))
CREATE TABLE [dbo].[Test]([TestId] [int] NOT NULL);',
@target_group_name = 'PoolGroup';

Creare un passaggio del processo per eseguire un'istruzione T-SQL e raccogliere i risultati

Nell'esempio seguente viene illustrato come creare un processo elastico per eseguire un'istruzione T-SQL in un processo elastico e raccogliere i risultati in un database SQL di Azure. Nell'esempio seguente viene jobs.sp_add_jobstep usato per creare un passaggio di processo nel processo denominato ResultsJob, da eseguire nel gruppo PoolGroupdi destinazione . I risultati vengono registrati in una tabella denominata nel database denominato dbo.results_table Results nel server server1.database.windows.net.

--Connect to the job database specified when creating the job agent

-- Add a job to collect perf results
EXEC jobs.sp_add_job @job_name ='ResultsJob', @description='Collection Performance data from all customers'

-- Add a job step w/ schedule to collect results
EXEC jobs.sp_add_jobstep
@job_name = 'ResultsJob',
@command = N' SELECT DB_NAME() DatabaseName, $(job_execution_id) AS job_execution_id, * FROM sys.dm_db_resource_stats WHERE end_time > DATEADD(mi, -20, GETDATE());',
@target_group_name = 'PoolGroup',
@output_type = 'SqlDatabase',
@output_server_name = 'server1.database.windows.net',
@output_database_name = 'Results',
@output_schema_name = 'dbo',
@output_table_name = 'results_table';