0

年などの日付部分を分割し、ストアド プロシージャの変数に代入したいと考えています。そのストアド プロシージャを sql azure で実行します。エラー「'MASTER..spt_values' のデータベースおよび/またはサーバー名への参照は、このバージョンの SQL Server ではサポートされていません。」がスローされます。

コード:

declare @Year int
SET @Year =DATEPART(YYYY,GETDATE())
create table #SundayDates (Sunday datetime,NextSunday datetime)
INSERT INTO #SundayDates(Sunday,NextSunday)
SELECT max(dates),MAX(DATEADD(DD,+7,dates)) AS last_sunday from
(
    SELECT dateadd(day,number-1,DATEADD(year,@year-1900,0)) AS dates
    FROM MASTER..spt_values WHERE type='p' and
    number between 1 and DATEDIFF(day,DATEADD(year,@year-1900,0),DATEADD(year,@year-1900+1,0))
) as t
WHERE DATENAME(weekday,dates)='sunday' GROUP BY DATEADD(month,datediff(month,0,dates),0)
4

1 に答える 1

0

このクエリは、同じ結果を (一時テーブルに挿入するのではなく、結果セットとして返しますが、そのように簡単に適応させることができます) 提供spt_valuesし、エラー メッセージが許可されていないことを示すテーブルに依存しません。

;With Numbers (Num) as (
    select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all
    select 6 union all select 7 union all select 8 union all select 9 union all select 10 union all select 11
), MonthEnds as (
    select DATEADD(month,DATEDIFF(year,'20010101',CURRENT_TIMESTAMP)*12 + n.Num,'20010131') as EndDate
    from Numbers n
), LastSundays as (
    select DATEADD(day,-n.Num,EndDate) as EndDate
    from
        MonthEnds me
            cross join
        Numbers n
    where
        n.Num between 0 and 6 and
        DATEPART(weekday,DATEADD(day,-n.Num,EndDate)) = DATEPART(weekday,'20130512')
)
select EndDate,DATEADD(day,7,EndDate) as FollowingSunday
from LastSundays
于 2013-05-10T14:38:51.287 に答える