如何从一个函数调用的扩展过程(How to call an extended procedure f

2019-10-20 06:57发布

您好即时通讯有问题试图让下面的函数工作。

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,级别16,状态14

难道说xp_logininfo可能取决于参数返回不同的结果集? 当我使用OPENQUERY我可以通过设置这个解决此问题:SET FMTONLY OFF。 有谁知道,如果有我的问题类似的解决办法?

Answer 1:

你不能因为这个XP返回数据。 即使您加载表。

基本上,在UDF的XPS是一个非首发......我会使用一个存储过程

CREATE FUNCTION

从调用功能扩展存储过程

扩展存储过程,当它从一个函数中调用,不能结果集返回给客户端。 返回结果集的客户端的所有消耗臭氧层物质的API将返回FAIL。 扩展存储过程可以连接回SQL Server实例; 然而,它不应该尝试加入相同的事务中调用该扩展存储过程的功能。

类似于从批处理或存储过程调用,扩展存储过程将在其下运行SQL Server的Windows安全帐户的上下文中执行。 该存储过程的所有者给它EXECUTE权限给用户时,应该考虑这一点。



文章来源: How to call an extended procedure from a function