2014-09-10 190 views
1

当我运行在SQL Server中下面的T-SQL 2012,它工作正常,但在SQL Server 2008 R2中我得到的错误SQL:必须声明标量变量

必须声明标量变量“@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是,在肯定存在的用户定义的表型数据库

编辑我只是刚刚运行以下和两个返回的结果测试的前两个疑问:

SELECT * FROM dbo.udf_First_Timeline_Entries_Of_Status(@assessmentId) 
SELECT * FROM dbo.udf_First_Timeline_Entries_Of_Any_Statuses(@outIds) 
+2

您的数据库处于80兼容模式?这些UDF是否为TVF?也是2008年<> 2008 R2。 – 2014-09-10 16:12:44

+0

@AaronBertrand明确2008R2,而不是2008. 2012实例是在90兼容模式,但在2008R2实例在80 – hofnarwillie 2014-09-10 16:17:03

+0

@AaronBertrand哦是的,它是表值函数 – hofnarwillie 2014-09-10 16:17:28

回答

1

详细的由阿龙贝特朗评论,这个问题是由于兼容性数据库模式。将兼容性更改为90(SQL Server 2005)解决了问题。具有兼容模式80(SQL Server 2000)的数据库不支持UDT等新功能。

有关兼容模式的影响和行为的更多详细信息,请参阅此线程here