2016-01-07 1 views
0

Je tire mes cheveux et j'ai essayé chaque publication.sqlcmd exécute la ligne fine et cmd mais ne produit pas de sortie en tant qu'étape exec cmd dans un travail d'agent SQL

J'ai un script tsql appelé C: \ DBAReports \ testsql.sql. Si je passe à une invite de commande enregistrée sur mon serveur, et exécutez: sqlcmd -S localhost -i C:\DBAReports\testsql.sql -o C:\DBAReports\testout.txt

Mais si je crée un nouveau travail d'agent avec 1 étape de type Système d'exploitation (CmdExec) pour s'exécuter en tant que compte de service de l'Agent SQL Server, en cas de succès Quittez la réussite de la création de rapports sur le travail et sur Echec Quittez l'échec du rapport sur le travail. avec le propriétaire mes mêmes fenêtres d'ouverture de session que lorsque j'exécute l'invite cmd, cliquez avec le bouton droit sur le travail d'agent et commencez à l'étape 1, j'obtiens le job réussi (Job a été invoqué par mon login Windows) et l'étape 1 est exécutée user is-sql "L'étape n'a généré aucune sortie." Code de sortie du processus 0. L'étape a réussi ".

Mais il n'écrit pas le fichier de sortie.

Des idées?

La raison pour laquelle je veux faire ceci est que je reçois périodiquement Erreur: 18057, Gravité: 20, État: 2 Échec de la configuration du contenu d'exécution dans mon journal du serveur SQL. Ce que j'espère faire est de lancer ce travail quand cela se produit pour essayer de savoir quels sont les SPID, l'état, le SQL en cours d'exécution, etc et l'écrire dans un fichier de sortie.

Mon script testsql.sql contient.

SELECT 
    SPID    = er.session_id 
    ,STATUS    = ses.STATUS 
    ,[Login]   = ses.login_name 
    ,Host    = ses.host_name 
    ,BlkBy    = er.blocking_session_id 
    ,DBName    = DB_Name(er.database_id) 
,CommandType  = er.command 
,SQLStatement  = st.text 
,ObjectName   = OBJECT_NAME(st.objectid) 
,ElapsedMS   = er.total_elapsed_time 
,CPUTime   = er.cpu_time 
,IOReads   = er.logical_reads + er.reads 
,IOWrites   = er.writes 
,LastWaitType  = er.last_wait_type 
,StartTime   = er.start_time 
,Protocol   = con.net_transport 
,ConnectionWrites = con.num_writes 
,ConnectionReads = con.num_reads 
,ClientAddress  = con.client_net_address 
,Authentication  = con.auth_scheme 
FROM sys.dm_exec_requests er 
OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) st 
LEFT JOIN sys.dm_exec_sessions ses 
ON ses.session_id = er.session_id 
LEFT JOIN sys.dm_exec_connections con 
ON con.session_id = ses.session_id 

Merci d'avance pour toute aide. J'ai essayé tant de suggestions, et soit obtenir des erreurs de syntaxe sur la commande, et quand je n'obtiens pas d'erreur de syntaxe sur le sqlcmd, il ne génère aucune sortie.

+0

Votre second paragraphe est incomplet ... que se passe-t-il exactement si vous lancez sqlcmd en ligne de commande? S'il vous plaît modifier votre question et compléter cette phrase. –

+0

Merci pour votre commentaire. Si je lance sqlcmd -S localhost -i C: \ DBAReports \ testsql.sql -o C: \ DBAReports \ testout.txt dans la ligne de commande, cela fonctionne. En d'autres termes, il exécute le script testsql.sql et produit la sortie pour le sql dans un fichier appelé testout.txt. Je pense qu'il doit y avoir quelque chose à propos des permissions en essayant de l'exécuter en tant que travail d'agent. Je suis nouveau sur SQL Server. J'ai fini par contourner le problème avec une procédure stockée, mais j'aimerais quand même que la ligne de commande fonctionne. – stealthfrog

+0

Pouvez-vous jeter un oeil aux propriétés de connexion de l'utilisation de connexion pour exécuter le travail? Regardez les rôles du serveur de la connexion: a-t-il des rôles 'diskadmin' ou' serveradmin'? Notez que je ne suis pas trop compétent avec des emplois et autres. Mais il se peut que le Login n'ait pas les bons rôles de serveur. –

Répondre

0

Une autre façon - essayez de modifier l'étape de travail en tant que Type: T-SQL scénario et la commande comme:

EXEC master..xp_CMDShell 'C:\Work\temp\test3.bat' 

S'il vous plaît remplacer le chemin du fichier bat avec le vôtre.