【问题标题】:How to call an extended procedure from a function如何从函数调用扩展过程
【发布时间】:2011-01-25 23:53:45
【问题描述】:

您好,我在尝试使以下功能正常工作时遇到了麻烦。

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。有谁知道我的问题是否有类似的解决方法?

【问题讨论】:

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


    【解决方案1】:

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

    基本上,udfs 中的 xps 不是入门...我会使用存储过程

    来自CREATE FUNCTION

    从函数调用扩展存储过程

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

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

    【讨论】:

    • 哦,我读的时候没看到。我想使用一个函数,所以我可以在视图中使用交叉应用。我想我应该尝试找到其他方法。谢谢!
    猜你喜欢
    • 2017-11-23
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多