0

どうすればこの問題を解決できますか?

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[GetDataById] ()
RETURNS INT
AS
BEGIN
  DECLARE @query NVARCHAR(500)
  DECLARE @j INT
  SET @query=N'select * from catalog'
  EXEC sp_executesql @query
  RETURN @j
END

これを実行しようとすると:select dbo.GetDataById()

エラー メッセージが表示されます。

関数内から実行できるのは、関数と拡張ストアド プロシージャだけです。

4

2 に答える 2

2

SQL Server MVP の Erland Sommarskog によるこの投稿から:

T-SQL で記述された使用済み定義関数から動的 SQL を使用することはできません。これは、データベースの状態を変更する可能性のある UDF での操作が許可されていないためです (UDF はクエリの一部として呼び出される可能性があるため)。更新を含め、動的 SQL から何でも実行できるため、動的 SQL が許可されない理由は明らかです。

于 2009-10-16T15:05:26.697 に答える
0

動的に作成された SQL を関数内から使用することはできません。そのためには、ストアド プロシージャを使用する必要があります。

しかし、あなたの場合、とにかくクエリを変数に入れる理由がわかりません。

于 2009-10-16T14:43:04.517 に答える