我正尝试在的SQL Server 2005如何在SQL Server中的VIEW“声明标量变量”(2005)
的SQL代码工作作为这样创建VIEW(我在VS2008中使用它),但在SQL Server中,我无法保存它,因为弹出错误消息“声明标量变量@StartDate”和“声明标量变量@EndDate”。
下面是代码:
WITH Calendar AS (SELECT CAST(@StartDate AS datetime) AS Date
UNION ALL
SELECT DATEADD(d, 1, Date) AS Expr1
FROM Calendar AS Calendar_1
WHERE (DATEADD(d, 1, Date) < @EndDate))
SELECT C.Date, C2.Country, COALESCE (SUM(R.[Amount of people per day needed]), 0) AS [Allocated testers]
FROM Calendar AS C CROSS JOIN
dbo.Country AS C2 LEFT OUTER JOIN
dbo.Requests AS R ON C.Date BETWEEN R.[Start date] AND R.[End date] AND R.CountryID = C2.CountryID
GROUP BY C.Date, C2.Country
而且我的问题当然是 - 究竟应该怎么申报呢?
我试图把下面的第一个代码:
DECLARE @StartDate smalldatetime
DECLARE @EndDate smalldatetime
但是didn't做的伎俩,就如我所料 - 它只是给了我另一个弹出消息:
“声明游标SQL构造或语句不受支持。”
不错,要测试一下 - 我认为它是一个可以接受的答案:-) – 2010-08-13 12:34:54
功能的缺点是,如果你想加入或过滤它们,它们的性能很差 – 2012-07-27 15:24:30
@IanBoyd,对于多语句TVF和标量函数,你说的通常是正确的,然而,这里的解决方案使用了内联表值函数AFAIK,SQL Server将在查询中扩展UDF(就像在视图中所做的那样),因此,与你已经说过,他们会在join/filter中工作得更好(假设参与表有适当的索引),或者至少不会有任何惩罚涉及使用内联TVF的情况(除了额外的解析),参见http: //blogs.msdn.com/b/psssql/archive/2010/10/ 28/query-performance-and-multi-statement-table-valued values.aspx – VinayC 2012-08-01 06:38:18