-- 允许配置高级选项
EXEC sp_configure 'show advanced options', 1
GO
-- 重新配置
RECONFIGURE
GO
-- 启用xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
--重新配置
RECONFIGURE
GOEXEC master.dbo.XP_CMDSHELL 'echo Hello World'执行后一直直接返回NULL值。xp_cmdshell命令已启用,不知是什么原因导致的?

解决方案 »

  1.   

    补充:
    有时尝试重启数据库或重启服务器后,xp_cmdshell命令可以恢复,但运行一段时间后,突然又会失效,没有规律。
      

  2.   

    EXEC sp_configure 'show advanced options', 1
    GO
    -- 重新配置
    RECONFIGURE
    GO
    -- 启用xp_cmdshell
    EXEC sp_configure 'xp_cmdshell', 1
    GO
    --重新配置
    RECONFIGURE
    GOEXEC master.dbo.xp_cmdshell 'echo Hello World'/*
    output
    ------------
    Hello World
    NULL(2 行受影响)
      

  3.   

    xp_cmdshell命令失效后的情况是直接返回NULLEXEC master.dbo.XP_CMDSHELL 'dir c:'EXEC master.dbo.xp_cmdshell 'echo Hello World'/*比如上面2句的结果都是:
    output
    ------------
    NULL(1 行受影响)
      

  4.   

    SQL Server 2005 SP3 WINDOWS2003 R2
      

  5.   

    你每次启用完cmdshell命名就关闭了,启用它对数据库并不安全
    EXEC sp_configure 'show advanced options', 1
    GO
    -- 重新配置
    RECONFIGURE
    GO
    -- 启用xp_cmdshell
    EXEC sp_configure 'xp_cmdshell', 1
    GO
    --重新配置
    RECONFIGURE
    GOEXEC master.dbo.xp_cmdshell 'echo Hello World'EXEC sp_configure 'xp_cmdshell', 0
    GO
    --重新配置
    RECONFIGURE
    GO
    EXEC sp_configure 'show advanced options', 0
    GO
    -- 重新配置
    RECONFIGURE
    GO
      

  6.   

    其实我不太明白为何要用 XP_CMDSHELL 'echo Hello World',实现同样的效果, 直接用 print 'Hello World' 不就ok了吗?
      

  7.   

    或者 select 'Hello World' output
      

  8.   

    多谢ssp2009和ap0405140提醒
    EXEC master.dbo.xp_cmdshell 'echo Hello World'上面是举个例子,实际是调用第三方命令行工具,和文件操作。
      

  9.   

    各位大牛帮我看看啊,这问题困惑我3年多了,一直没有解决。看了有人问过同样的问题,但我的不是这个原因,郁闷啊
    http://social.msdn.microsoft.com/Forums/en/transactsql/thread/5c189d19-b9ef-4e01-a448-47fff2f7c836
      

  10.   

    失效的情况下, 检查sp_configure 'xp_cmdshell' 结果是0还是1? 也可能是有程序在修改这个系统参数.
      

  11.   

    多谢ap0405140的关注。我看了不是这个原因,一直是启用状态,结果直接返回NULL。如果是禁用状态,结果是提示:
    消息 15281,级别 16,状态 1,过程 xp_cmdshell,第 1 行
    SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'xp_cmdshell'。有关启用 'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。 
      

  12.   

    你的问题的关键在于:
    有时有用,有时没用!这个要你自己检查了,什么时候有用,你做了什么以后有用,什么时候没用,你做了什么后没用,肯定是由于某个外部原因造成调用xp_shell失败的.你可以到其他机器上去试试是否会出现类似的问题,正常的机器,应该不会有这种怪异的情况发生.