sysprocesses表内部或外部的sql server代理作业是不一样的

时间:2016-07-14 20:16:55

标签: sql-server-2008 sql-server-agent

我尝试编写一个简单的sql server代理作业来每天运行。 sql语句如下:

插入testtable(nt_username,last_batch) 从master.sys.sysprocesses中选择nt_username,last_batch,其中nt_username<> ''

如果我在管理工作室中运行它,那么相同的sql语句效果很好。但它只返回一条记录,如:

管理员2016-07-14 13:07:08.270

当它作为sql server代理作业运行时。结果,它没用。我做错了什么以及如何解决?对于作为sql代理作业的相同结果,正确的sql语句是什么?我的sql server是sql 2008 R2,在Windows Server 2008上运行Service Pack 2(10.50.4000)。

感谢。

2 个答案:

答案 0 :(得分:0)

请不要使用sysprocesses。它在SQL Server 2005发布时已被弃用,而您使用的sys.sysprocesses“表”只是兼容性视图。 sys.sysprocesses的MSDN页面顶部有一个注释:

  

此SQL Server 2000系统表作为向后兼容性的视图包含在内。我们建议您使用当前的SQL Server系统视图。要查找等效的系统视图或视图,请参阅Mapping System Tables to System Views (Transact-SQL)。将在Microsoft SQL Server的未来版本中删除此功能。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

您应该使用新的DMV(动态管理视图):

请注意,登录可能需要获得VIEW SERVER STATE的服务器级权限才能查看sys.dm_exec_sessionssys.dm_exec_requests的自己的数据,或查看任何内容全部在sys.dm_exec_connections

如果需要此权限,则运行GRANT语句时的当前数据库需要为master,因为这是服务器级权限。

答案 1 :(得分:0)

经过仔细检查后发现,罪魁祸首是sql server agent进程必须在域帐户下运行。我遇到了问题,因为它在网络服务帐户下运行。奇怪的是,sql server也可以在同一个网络服务帐户下运行,没有任何问题。这很令人头疼,特别是当你急着想要工作的时候。