我的问题: 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
我认为我的想法是完全错误的。