当我在SQL Server 2012中运行以下T-SQL时,它工作正常,但在SQL Server 2008 R2中我收到错误
必须声明标量变量" @ in"
and
必须声明标量变量" @ out"
代码:
DECLARE @outIds nvarchar(max);
DECLARE @in TimeLineReportList;
DECLARE @out TimeLineReportList;
DECLARE @startDate datetime;
DECLARE @endDate datetime;
DECLARE @assessmentId int;
SET @startDate ='2013-01-01T00:00:00.000'
SET @endDate ='2013-01-01T00:00:00.000'
SET @assessmentId = 14
SET @outIds ='3,9,10'
INSERT INTO @in
SELECT *
FROM dbo.udf_First_Timeline_Entries_Of_Status(@assessmentId)
INSERT INTO @out
SELECT *
FROM dbo.udf_First_Timeline_Entries_Of_Any_Statuses(@outIds)
SELECT *
FROM dbo.udf_Generic_Timelines(@startDate, @endDate, @in, @out,default)
TimeLineReportList
是用户定义的表类型,绝对存在于DB
编辑我刚刚运行以下内容测试了前两个查询,并且两者都返回结果:
SELECT * FROM dbo.udf_First_Timeline_Entries_Of_Status(@assessmentId)
SELECT * FROM dbo.udf_First_Timeline_Entries_Of_Any_Statuses(@outIds)
答案 0 :(得分:1)
Aaron Bertrand的评论详细说明,问题是由于数据库的兼容模式。将兼容性更改为90(SQL Server 2005
)修复了此问题。兼容模式为80(SQL Server 2000
)的数据库不支持UDT等新功能。
有关兼容模式的效果和行为的更多详细信息,请参阅此主题here。