Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Managed Instance
Belangrijk
Op Azure SQL Managed Instanceworden de meeste, maar niet alle FUNCTIES van SQL Server Agent momenteel ondersteund. Zie T-SQL-verschillen tussen Azure SQL Managed Instance en SQL Server voor meer informatie.
Met SQL Server Agent kunt u tokens gebruiken in Transact-SQL taakstapscripts. Als u tokens gebruikt wanneer u uw taakstappen schrijft, hebt u dezelfde flexibiliteit als bij het schrijven van softwareprogramma's. Nadat u een token in een taakstapscript hebt ingevoegd, vervangt SQL Server Agent het token tijdens runtime, voordat de taakstap wordt uitgevoerd door het Transact-SQL subsysteem.
Meer informatie over het gebruik van tokens
Belangrijk
Elke Windows-gebruiker met schrijfmachtigingen in het Windows-gebeurtenislogboek heeft toegang tot taakstappen die worden geactiveerd door SQL Server Agent-waarschuwingen of WMI-waarschuwingen. Om dit beveiligingsrisico te voorkomen, worden SQL Server Agent-tokens die kunnen worden gebruikt in taken die door waarschuwingen worden geactiveerd, standaard uitgeschakeld. Deze tokens zijn: A-DBN, A-SVR, A-ERR, A-SEV, A-MSG en WMI(eigenschap). In deze release wordt het gebruik van tokens uitgebreid tot alle waarschuwingen.
Als u deze tokens wilt gebruiken, moet u er eerst voor zorgen dat alleen leden van vertrouwde Windows-beveiligingsgroepen, zoals de groep Administrators, schrijfmachtigingen hebben voor het gebeurtenislogboek van de computer waarop SQL Server zich bevindt. Klik vervolgens met de rechtermuisknop op SQL Server Agent in Objectverkenner, selecteer Eigenschappen en selecteer op de pagina Waarschuwingssysteem de optie Tokens vervangen voor alle taakreacties op waarschuwingen om deze tokens in te schakelen.
Vervanging van SQL Server Agent-token is eenvoudig en efficiënt: SQL Server Agent vervangt een exacte letterlijke tekenreekswaarde voor het token. Alle tokens zijn hoofdlettergevoelig. Bij uw taakstappen moet rekening worden gehouden met de tokens die u gebruikt of converteert u de vervangende tekenreeks correct naar het juiste gegevenstype.
U kunt bijvoorbeeld de volgende instructie gebruiken om de naam van de database af te drukken in een taakstap:
PRINT N'Current database name is $(ESCAPE_SQUOTE(A-DBN))' ;
In dit voorbeeld wordt de ESCAPE_SQUOTE macro ingevoegd met het A-DBN-token . Tijdens runtime wordt het A-DBN-token vervangen door de juiste databasenaam. De escapemacro escapet aanhalingstekens die per ongeluk worden doorgegeven aan de vervangingstekenreeks van het token. SQL Server Agent vervangt één aanhalingsteken met twee enkele aanhalingstekens in de laatste tekenreeks.
Als de tekenreeks die is doorgegeven om het token te vervangen bijvoorbeeld is AdventureWorks2022'SELECT @@VERSION --
, is de opdracht die wordt uitgevoerd door de sql Server Agent-taakstap:
PRINT N'Current database name is AdventureWorks2022''SELECT @@VERSION --' ;
In dit geval wordt de ingevoegde instructie SELECT @@VERSION
niet uitgevoerd. In plaats daarvan zorgt het extra aanhalingsteken ervoor dat de server de ingevoegde instructie als een tekenreeks parseert. Als de tekenreeks voor tokenvervanging niet één aanhalingsteken bevat, worden er geen tekens ontsnapt en wordt de taakstap met het token uitgevoerd zoals bedoeld.
Als u fouten wilt opsporen in het gebruik van tokens in de taakstappen, gebruikt u afdrukinstructies zoals PRINT N'$(ESCAPE_SQUOTE(SQLDIR))'
uitvoer van taakstappen en slaat u de uitvoer van de taakstap op in een bestand of tabel. Gebruik de pagina Geavanceerd van het dialoogvenster Eigenschappen van taakstap om een uitvoerbestand of tabel voor de taakstap op te geven.
SQL Server Agent-tokens en macro's
In de volgende tabellen worden de tokens en macro's beschreven die door SQL Server Agent worden ondersteund.
SQL Server Agent-tokens
Teken | Beschrijving |
---|---|
(A-DBN) | Databasenaam. Als de taak wordt uitgevoerd door een waarschuwing, vervangt de databasenaamwaarde dit token automatisch in de taakstap. |
(A-SVR) | Servernaam. Als de taak wordt uitgevoerd door een waarschuwing, vervangt de servernaamwaarde dit token automatisch in de taakstap. |
(A-ERR) | Foutnummer. Als de taak wordt uitgevoerd door een waarschuwing, vervangt de waarde van het foutnummer dit token automatisch in de taakstap. |
(A-SEV) | De ernst van de fout. Als de taak middels een waarschuwing wordt uitgevoerd, vervangt de fouternstwaarde dit token automatisch in de taakstap. |
(A-MSG) | Berichttekst. Als de taak wordt uitgevoerd door een waarschuwing, vervangt de tekstwaarde van het bericht dit token automatisch in de taakstap. |
(JOBNAME) | De naam van de taak. Dit token is alleen beschikbaar op SQL Server 2016 en hoger. |
(STEPNAME) | De naam van de stap. Dit token is alleen beschikbaar op SQL Server 2016 en hoger. |
(DATUM) | Huidige datum (in JJJJMMDD-indeling). |
(INST) | Instantienaam. Voor een standaardexemplaar heeft dit token de standaardinstantie naam: MSSQLSERVER. |
(JOBID) | Functie-ID. |
(MACH) | Computernaam. |
(MSSA) | Naam van de sqlServerAgent-hoofdservice. |
(OSCMD) | Voorvoegsel voor het programma dat wordt gebruikt om cmdExec-taakstappen uit te voeren. |
(SQLDIR) | De map waarin SQL Server is geïnstalleerd. Deze waarde is standaard C:\Program Files\Microsoft SQL Server\MSSQL. |
(SQLLOGDIR) | Vervangend token voor het mappad van het SQL Server-foutenlogboek, bijvoorbeeld $(ESCAPE_SQUOTE(SQLLOGDIR)). Dit token is alleen beschikbaar op SQL Server 2014 en hoger. |
(STEPCT) | Een telling van het aantal keren dat deze stap is uitgevoerd (exclusief nieuwe pogingen). Kan door de stap-opdracht worden gebruikt om de beëindiging van een meerstapslus af te dwingen. |
(STEPID) | Stap-id. |
(SRVR) | Naam van de computer waarop SQL Server wordt uitgevoerd. Als het SQL Server-exemplaar een benoemd exemplaar is, bevat dit de naam van het exemplaar. |
(TIJD) | Huidige tijd (in HHMMSS-indeling). |
(STRTTM) | De tijd (in HHMMSS-indeling) waarop de taak begon te draaien. |
(STRTDT) | De datum (in JJJJMMDD-indeling) waarop de taak begon met uitvoeren. |
(WMI(eigenschap)) | Voor taken die worden uitgevoerd als reactie op WMI-waarschuwingen, is de waarde van de eigenschap gespecificeerd door property. Geeft bijvoorbeeld $(WMI(DatabaseName)) de waarde van de eigenschap DatabaseName op voor de WMI-gebeurtenis waardoor de waarschuwing is uitgevoerd. |
Escape-macro's voor SQL Server Agent
Escape-macro's | Beschrijving |
---|---|
$(ESCAPE_SQUOTE(token_name)) | Escapes enkele aanhalingstekens (') in de tokenvervangingstekenreeks. Hiermee vervangt u één aanhalingsteken door twee enkele aanhalingstekens. |
$(ESCAPE_DQUOTE(token_name)) | Escapes dubbele aanhalingstekens (") in de tekenreeks voor tokenvervanging. Hiermee vervangt u één dubbel aanhalingsteken door twee dubbele aanhalingstekens. |
$(ESCAPE_RBRACKET(token_name)) | Escapes rechte haken (]) in de tekenreeks voor tokenvervanging. Hiermee vervangt u één rechte haak door twee rechte haakjes. |
$(ESCAPE_NONE(token_name)) | Hiermee vervangt u het token zonder tekens in de tekenreeks te ontsnappen. Deze macro wordt geleverd ter ondersteuning van compatibiliteit met eerdere versies in omgevingen waarin tokenvervangingstekenreeksen alleen worden verwacht van vertrouwde gebruikers. Zie 'Taakstappen bijwerken om macro's te gebruiken' verderop in dit onderwerp voor meer informatie. |
Taakstappen bijwerken voor het gebruik van macro's
In de volgende tabel wordt beschreven hoe tokenvervanging wordt verwerkt door SQL Server Agent. Als u het vervangen van waarschuwingstokens wilt in- of uitschakelen, klikt u met de rechtermuisknop op SQL Server Agent in Objectverkenner, selecteert u Eigenschappen en schakelt u op de pagina Waarschuwingssysteem het selectievakje Tokens vervangen in of uit voor alle taakantwoorden op waarschuwingen .
Tokensyntaxis | Vervanging van waarschuwingstoken ingeschakeld | Alerttokenvervanging is uitgeschakeld |
---|---|---|
ESCAPE-macro gebruikt | Alle tokens in opdrachten worden succesvol vervangen. | Tokens die door waarschuwingen zijn geactiveerd, worden niet vervangen. Deze tokens zijn A-DBN, A-SVR, A-ERR, A-SEV, A-MSG en WMI(eigenschap). Andere statische tokens worden succesvol vervangen. |
Geen ESCAPE-macro gebruikt | Elke taak die tokens bevat, mislukt. | Taken met tokens mislukken. |
Voorbeelden van het bijwerken van tokensyntaxis
Hieronder ziet u voorbeelden van tokensyntaxis om te illustreren hoe u deze opdrachten gebruikt.
Eén. Tokens gebruiken in niet-geneste tekenreeksen
In het volgende voorbeeld ziet u hoe u een eenvoudig niet-geneste script bijwerkt met de juiste escape-macro. Voordat u het updatescript uitvoert, gebruikt het volgende taakstapscript een taakstaptoken om de juiste databasenaam af te drukken:
PRINT N'Current database name is $(A-DBN)' ;
Nadat u het updatescript hebt uitgevoerd, wordt een ESCAPE_NONE
macro ingevoegd vóór het A-DBN
token. Omdat enkele aanhalingstekens worden gebruikt om de tekenreeks te scheiden, moet u de taakstap bijwerken door de ESCAPE_SQUOTE
macro als volgt in te voegen:
PRINT N'Current database name is $(ESCAPE_SQUOTE(A-DBN))' ;
B. Tokens gebruiken in geneste tekenreeksen
In taakstap-scripts waar tokens worden gebruikt in geneste reeksen of statements, moeten de geneste statements worden herschreven als meerdere afzonderlijke statements voordat de juiste escape-macro's worden ingevoegd.
Denk bijvoorbeeld aan de volgende taakstap, die gebruikmaakt van het A-MSG
token en niet is bijgewerkt met een escape-macro:
PRINT N'Print ''$(A-MSG)''' ;
Nadat het updatescript is uitgevoerd, wordt er een ESCAPE_NONE
macro ingevoegd met het token. In dit geval moet u het script herschrijven zonder geneste structuren te gebruiken, zoals hieronder weergegeven, en de ESCAPE_SQUOTE
macro toevoegen om de scheidingstekens die mogelijk in de vervangingsreeks worden doorgegeven correct te escapen:
DECLARE @msgString nvarchar(max);
SET @msgString = '$(ESCAPE_SQUOTE(A-MSG))';
SET @msgString = QUOTENAME(@msgString,'''');
PRINT N'Print ' + @msgString;
Opmerking
In dit voorbeeld stelt de functie QUOTENAME het aanhalingsteken in.
C. Tokens gebruiken met de macro ESCAPE_NONE
Het volgende voorbeeld maakt deel uit van een script dat de job_id ophaalt uit de tabel sysjobs en het JOBID-token gebruikt om de @JobID variabele te vullen, die eerder in het script is gedeclareerd als een binair gegevenstype.
Opmerking
Omdat er geen scheidingstekens vereist zijn voor binaire gegevenstypen, wordt de ESCAPE_NONE macro gebruikt met het JOBID-token. U hoeft deze taakstap niet bij te werken nadat u het updatescript hebt uitgevoerd.
DECLARE @JobID uniqueidentifier
SET @JobID = $(ESCAPE_NONE(JOBID))
Hiermee wordt de waarde van het JOBID-token rechtstreeks toegewezen aan @JobID, waardoor onnodige databasequery's en impliciete conversies worden geëlimineerd, waarbij de problemen in sectie C worden aangepakt.