SQL:必须声明标量变量

时间:2014-09-10 16:07:57

标签: sql sql-server tsql sql-server-2008-r2 sql-server-2012

当我在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)

1 个答案:

答案 0 :(得分:1)

Aaron Bertrand的评论详细说明,问题是由于数据库的兼容模式。将兼容性更改为90(SQL Server 2005)修复了此问题。兼容模式为80(SQL Server 2000)的数据库不支持UDT等新功能。

有关兼容模式的效果和行为的更多详细信息,请参阅此主题here