繁体   English   中英

运行SELECT查询的SQL作业仅返回一行

[英]SQL job that runs a SELECT query only returns one row

长期的读者,但是第一次来这里。 希望您能帮助我解决一些SQL im问题。 我不是专家,所以您可能需要忍受我:-)

我试图安排SQL作业以使用sp_send_dbmail通过电子邮件发送SQL服务器上存在的SQL系统管理员列表。 我遇到的问题是我让它在一台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='   '`

作业需要在sysadmin或securityadmin角色成员的安全上下文下运行,以返回所有sysadmin角色成员。 确保作业所有者是上述服务器角色的成员,以便作业在所需的安全上下文下运行。 作业历史记录将显示实际用于运行作业的帐户。

我建议您使用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';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM