2

SQL Server (2000/2005) 関数は、テーブル名とフィールド名をパラメーターとして取得し、関数内の動的クエリから結果を返します。Table結果は、ストアド プロシージャでさらに使用される変数に割り当てる必要があります。これを達成する方法は?

「関数内から実行できるのは、関数と拡張ストアド プロシージャのみです」というエラーが表示されます。

Declare @Data as table (FieldValue varchar(100))
insert into @Data select * from MyFunction ('Person.Address','AddressID')     

-- Function
Alter function MyFunction (
   @TableName varchar(100), @FieldName varchar(100) 
) returns @GetData table (
   FieldValue  varchar(100) 
) as
begin
        Declare @SQL varchar(250)
        Set @SQL = 'Select '+@FieldName+ ' from '+ @TableName
        Exec sp_executesql @SQL     
        return
end
4

3 に答える 3

1

ユーザー定義関数で「exec」を使用することはできません。UDF は副作用のないものでなければなりません。

于 2009-01-21T10:24:59.403 に答える
1

これが関数でどのように機能するかはわかりませんが、結果セットを返すストアド プロシージャがある場合は、INSERT EXEC ステートメントを使用してそれをテーブル変数に挿入できます。

INSERT @TableVariable
EXEC spYourProcedure

フィールドが一致する限り、それは機能します。それ以外の場合は、次を使用できます。

INSERT @TableVariable (FieldInSp1, FieldInSp2)
EXEC spYourProcedure

このようにして、ストアド プロシージャ間でデータを渡すことができます。追加情報については、 INSERT EXEC ステートメントに関するこのページを参照してください。

于 2009-01-21T05:52:08.613 に答える