プログラムからクエリが渡すテーブルを返す関数を SQL Server 2005 で作成したい...
しかし、このスクリプトでその関数を作成すると:
CREATE FUNCTION fn_test (@source varchar(255))
RETURNS TABLE AS
RETURN
EXECUTE (@source)
スクリプトにエラー メッセージが表示される
キーワード "EXECUTE` 付近の構文が正しくありません
プログラムからクエリが渡すテーブルを返す関数を SQL Server 2005 で作成したい...
しかし、このスクリプトでその関数を作成すると:
CREATE FUNCTION fn_test (@source varchar(255))
RETURNS TABLE AS
RETURN
EXECUTE (@source)
スクリプトにエラー メッセージが表示される
キーワード "EXECUTE` 付近の構文が正しくありません
完全に正しいです-インラインテーブル値関数の一部として任意のSQLを実行することは許可されていません:
--Transact-SQL Inline Table-Valued Function Syntax
CREATE FUNCTION [ schema_name. ] function_name
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type
[ = default ] [ READONLY ] }
[ ,...n ]
]
)
RETURNS TABLE
[ WITH <function_option> [ ,...n ] ]
[ AS ]
RETURN [ ( ] select_stmt [ ) ]
[ ; ]
(*) 任意の SQL を SQL Server オブジェクトに渡して実行する機能が必要な場合は、関数ではなくストアド プロシージャを使用します。関数はデータベースの状態を変更することを意図したものではありませんが、任意の SQL は実行できます...任意のことです。
(*)あなたはそうしない。
手順としては、次のようになります。
CREATE PROCEDURE test (@source varchar(255))
AS
EXECUTE (@source)
しかし、この時点でおそらく明らかなように、文字列として格納された任意の SQL を実行したい場合はEXECUTE
、それらを直接呼び出すこともできます。これは、(*) を挿入したときにほのめかしたことの一部です。他の部分は、文字列変数でサーバーに送信する理由です。実行したい SQL を送信しないのはなぜですか。とにかくサーバー上で任意のSQLを実行します。