私の質問: SQL Server 2008で、ストアドプロシージャで一時テーブルを定義し、それを変数としてユーザー定義関数に渡すことは可能ですか?
私は次のことをする必要があります:
手順があります
dbo.GetMsgCntData
。この手順はいくつかの計算を行っており、この手順の結果として、この手順で定義された一時テーブルにデータがあります(
GetMsgCntData
):-- table defined in dbo.GetMsgCntData DECLARE @tmpTable TABLE ( ID BIGINT, FirstName VARCHAR(50), LastName VARCHAR(50), UserType varchar(50), SenderID bigint, IsArchive bit )
したがって、
@tmpTable
いくつかのデータが含まれています。ユーザー定義関数を実行する必要がありますが、データにアクセスするための関数GetCnt(@status, @MsgTempTable)
が必要です。基本的に私はこのようなものが必要です:getCnt
@tmpTable
-- to be written at the end of dbo.GetMsgCntData SELECT cnt(*) total, dbo.GetCnt('open', @tmpTable) as opened, dbo.GetCnt('closed', @tmpTable) as closed FROM @tmpTable -- where @tmpTable is temporal table
ユーザー定義型として定義しようとし
@table
ました。GetCnt
CREATE TYPE dbo.tmp_Messages AS TABLE ( ID BIGINT, FirstName VARCHAR(50), LastName VARCHAR(50), UserType varchar(50), SenderID bigint, IsArchive bit ) CREATE FUNCTION FUNCTION [dbo].[GetCnt] ( @Status nvarchar(10), @MsgTempTable dbo.tmp_Messages READONLY ) ....
しかし、これは私にエラーメッセージを与えます:
Operand type clash: table is incompatible with tmp_Messages
私の考えは単に間違っていると思います。