2017-01-20 4 views
0

長時間の読者ですが、初回のポスターです。あなたが問題を抱えているいくつかのSQLで私を助けることができますように願っています。私は専門家ではないので、あなたは私に気付かなければならないかもしれません:-)SELECTクエリを実行するSQLジョブは1行だけを返します

sp_send_dbmailを使用してSQLサーバー上に存在するSQLシステム管理者のリストを電子メールで送信するようにSQLジョブをスケジュールしようとしています。私の問題は、1つのSQLサーバー(19行のCSV添付ファイルを電子メール)で作業しているということですが、別の2台のサーバーで同じジョブを実行しようとすると、クエリ(saアカウント)から1行しか返されません。ジョブのステップからSELECTクエリを取り出し、新しいクエリウィンドウを使用して手動で実行すると、正しい行数が返されますが、ジョブの一部として実行された場合は1行しか返されません。

私はほとんど何かアクセスまたは特権の問題でなければならないと確信していますが、私は何を理解することができます。ジョブ履歴は、ジョブの実行と正常終了を示します。

誰でも手助けできますか?私は本当にこれで私の髪を切っている!

ここには、ジョブステップに入力されたT-SQLがあります。

ありがとうございます!

`EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'SQL DB Alerts', 
@recipients = '<EmailAddressHere>', 
@subject = 'SQL Sysadmins', 
@execute_query_database = 'master', 
@query = N'SELECT @@SERVERNAME as SQLServerName, 
@@SERVICENAME as SQLInstanceName, 
name as LoginName 
FROM syslogins 
WHERE sysadmin = 1', 
@attach_query_result_as_file = 1, 
@query_attachment_filename = 'ListofSysAdmins.csv', 
@query_result_no_padding = 1, 
@append_query_error = 0, 
@exclude_query_output = 1, 
@query_result_header = 1, 
@query_result_separator=' '` 
+0

ないが、あなたは仕事(クエリ)を実行ユーザーを見てとるシステム管理者アカウント – TheGameiswar

+0

を使用するために、ジョブプロパティのオプションとして実行]を使用することができます。 SQLユーザーですか?ドメインユーザーですか? – M84

答えて

0

すべてのsysadminロールメンバを返すには、sysadminまたはsecurityadminロールメンバのセキュリティコンテキストでジョブを実行する必要があります。ジョブが必要なセキュリティコンテキストで実行されるように、ジョブの所有者が上記のサーバーロールのメンバーであることを確認します。ジョブ履歴には、実際にジョブを実行するために使用されたアカウントが表示されます。

廃止予定のシステムビューの代わりにDMVを使用することをお勧めします。 DMVを使用しているかわから

SELECT 
     @@SERVERNAME AS SQLServerName 
    , @@SERVICENAME AS SQLInstanceName 
    , logins.name as LoginName 
FROM sys.server_principals AS logins 
JOIN sys.server_role_members AS srm ON srm.member_principal_id = logins.principal_id 
JOIN sys.server_principals AS server_roles ON server_roles.principal_id = srm.role_principal_id 
WHERE 
    server_roles.name = 'sysadmin'; 
関連する問題