1

こんにちは私は次の機能を動作させるのに問題があります。

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を使用する場合、これを設定することでこれを克服できます:SETFMTONLYOFF。私の問題に同様の回避策があるかどうか誰かが知っていますか?

4

1 に答える 1

1

このXPはデータを返すため、できません。テーブルをロードしているにもかかわらず。

基本的に、udfs の xps はスターターではありません...ストアド プロシージャを使用します

からCREATE FUNCTION

関数からの拡張ストアド プロシージャの呼び出し

拡張ストアド プロシージャは、関数内から呼び出された場合、結果セットをクライアントに返すことができません。結果セットをクライアントに返す ODS API はすべて FAIL を返します。拡張ストアド プロシージャは、SQL Server のインスタンスに接続し直すことができます。ただし、拡張ストアド プロシージャを呼び出した関数と同じトランザクションに参加しようとすべきではありません。

バッチまたはストアド プロシージャからの呼び出しと同様に、拡張ストアド プロシージャは、SQL Server が実行されている Windows セキュリティ アカウントのコンテキストで実行されます。ストアド プロシージャの所有者は、EXECUTE 権限をユーザーに付与する際に、このことを考慮する必要があります。

于 2010-03-10T19:01:23.623 に答える