Estoy intentando crear una VISTA en SQL Server 2005.¿Cómo "declarar la variable escalar" en una vista en SQL Server (2005)
código SQL está funcionando como tal (Lo estoy usando en VS2008), pero en SQL Server no puedo guardarlo, ya que aparece el mensaje de error "Declare la variable escalar @StartDate" y "Declare la variable escalar @EndDate".
Aquí está el código:
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
Y mi pregunta es, por supuesto, - exactamente cómo debería declararlos?
traté de poner la siguiente por primera vez en el código:
DECLARE @StartDate smalldatetime
DECLARE @EndDate smalldatetime
Pero eso Dejase't hace el truco, justo lo que esperaba - que sólo me dio otro mensaje emergente:
"No se admite el constructo o declaración SQL de cursor de declaración".
Bueno, voy a probarlo - Lo veo como una respuesta aceptable :-) –
La desventaja de las funciones es que tienen un rendimiento muy pobre si quieres unirte o filtrarse en él. –
@IanBoyd, lo que dices es generalmente cierto para las funciones escalar y de TVF de varias declaraciones. Sin embargo, la solución aquí utiliza la función de valores en la tabla en línea. AFAIK, SQL Server expandiría el UDF en la consulta (tal como se hace en la vista). lo que ha dicho, funcionaría mucho mejor en join/filter (suponiendo que las tablas participantes tengan los índices apropiados) o, al menos, no debería haber ninguna penalización (aparte del análisis adicional) para usar TVF en línea. Consulte la página http: //blogs.msdn.com/b/psssql/archive/2010/10/ 28/query-performance-and-multi-statement-table-valued-functions.aspx – VinayC