【发布时间】:2023-03-22 11:27:01
【问题描述】:
我的问题:是否可以在 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 -
我尝试将
GetCnt中的@table定义为用户定义类型。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
我认为我的想法完全不正确。
【问题讨论】:
标签: sql-server-2008 tsql user-defined-functions table-valued-parameters