1

プログラムからクエリが渡すテーブルを返す関数を SQL Server 2005 で作成したい...

しかし、このスクリプトでその関数を作成すると:

CREATE FUNCTION fn_test (@source varchar(255))  
RETURNS TABLE AS  
RETURN
    EXECUTE (@source)

スクリプトにエラー メッセージが表示される

キーワード "EXECUTE` 付近の構文が正しくありません

4

1 に答える 1

3

完全に正しいです-インラインテーブル値関数の一部として任意の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を実行します。

于 2012-12-19T07:46:55.963 に答える