如何从函数调用扩展过程

时间:2010-03-10 16:39:07

标签: sql-server sql-server-2005 tsql user-defined-functions extended-procedures

嗨我在尝试使用以下功能时遇到了麻烦。

CREATE FUNCTION test ( @nt_group VARCHAR(128) )
RETURNS @nt_usr TABLE (
      [name] [nchar](128) NULL
    , [type] [char](8) NULL
    , [privilege] [char](9) NULL
    , [mapped login name] [nchar](128) NULL
    , [permission path] [nchar](128) NULL
    )
AS BEGIN 

    INSERT  INTO @nt_usr
    EXEC master.dbo.xp_logininfo 'DOMAIN\USER', @nt_group
     RETURN
   END

据我所知,我应该被允许调用扩展存储过程,我得到以下错误

  

Mes 443,Level 16,State 14

根据参数,xp_logininfo可能会返回不同的结果集吗?当我使用openquery时,我可以通过设置它来解决这个问题:SET FMTONLY OFF。有谁知道我的问题是否有类似的解决方法?

1 个答案:

答案 0 :(得分:1)

你不能因为这个xp返回数据。即使您正在加载表格。

基本上,udfs中的xps是非首发的...我会使用存储过程

来自CREATE FUNCTION

  

从函数调用扩展存储过程

     

扩展存储过程,当它   从函数内部调用,   无法将结果集返回给   客户。返回的任何ODS API   结果集将返回给客户端   失败。扩展存储过程   可以连接回一个实例   SQL Server;但是,它不应该尝试   加入与此相同的交易   调用扩展的函数   存储过程。

     

与批次或批次的调用类似   存储过程,扩展存储   程序将在。中执行   Windows安全的上下文   SQL Server所在的帐户   运行。存储的所有者   程序应该考虑到这一点   给予EXECUTE权限   用户。