2014-09-10 192 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