1. ホーム
  2. sql-server

[解決済み] 関数内から実行できるのは、関数と一部の拡張ストアドプロシージャのみです。

2022-02-26 22:52:28

質問

SQL Server 2016で作成したStored ProcedureとUser Defined Table Valued functionがあります。プロシージャも関数も正常にコンパイルできています。

プロシージャ名:getAgentLogActivity
関数名:sp_agent_log_activity

関数はプロシージャを呼び出しています GetAgentLogActivity と同様に 実行 sp_executesql . そのため、この関数に対して以下のようなselectクエリを実行しようとすると、エラーになります。

エラーです。関数と一部の拡張ストアドプロシージャのみ使用可能です。 は関数内から実行されます。

SELECT * FROM [dbo].[sp_agent_log_activity] 
('2017-02-01 00:00:00','2017-02-01 23:59:59',0,'','','','')

ストアドプロシージャと関数の完全なコードは、以下の場所で見ることができます。

ストアドプロシージャとユーザ定義テーブル値関数

コードの背景を説明すると、これはCisco UCCXデータベースのコードで、Informixで作成されています。私はそれをSQL Serverに変換しました。

このエラーに対する回避策があれば教えてください。

解決方法は?

最も簡単な回避策は、テーブル値関数をストアドプロシージャに変更することです。 ストアドプロシージャには、他のストアドプロシージャを実行できないという制限はありません。