私は新年のレポートの作成に取り組んでいます。DBにテーブルの作成権限がないため、このコードを削除して、一時テーブルで機能するようにしました。一時テーブルで必要だとは思わなかったので、PKey部分をコメントアウトしました。
2099年までの日付、BankHolidayの「N」、およびHolidayName
一時テーブルの列の「Null」を挿入できます。しかし、「元日」の休日の更新部分を個別に実行したり、1つの長いクエリとして実行したりすると、同じ構文エラーが発生します。「''の近くの構文が正しくありません。」私も自分が何をしているのか知っていると思うとき...
Declare @FirstDate as Date
Declare @LastDate as Date
Declare @WorkingDate as Date
set @FirstDate = '01-01-2010'
SET @LastDate = '12-31-2099'
-- create holiday table replace # with dbo for permanent table
begin
create table #CACFederalReserverHolidays
(
[Date] Date Not Null,
BankHoliday nvarchar(1) Null,
HolidayName nvarchar(50) Null,
) ON [Primary]
end
----add primary key replace # with dbo for permanent table
--begin
--alter table #CACFederalReserverHolidays add constraint
--PK_CACFederalReserverHolidays Primary Key Clustered
--(
--Date
--)
--With (Statistics_NoRecompute = off,
-- Ignore_Dup_Key = Off,
-- Allow_Row_Locks = On,
-- Allow_Page_Locks = On) On [Primary]
--end
-- insert the first date
Insert into #CACFederalReserverHolidays
([Date],[BankHoliday])
Values
(@FirstDate,'N')
-- insert the remaining dates by adding 1 to the last date
While (select MAX(DATE)
from #CACFederalReserverHolidays
) < @LastDate
begin
Set @WorkingDate = DATEADD (day,1,(select MAX(DATE) from #CACFederalReserverHolidays))
if @WorkingDate <= @LastDate
begin
insert into #CACFederalReserverHolidays
([Date], [BankHoliday])
Values
(@WorkingDate, 'N')
end
else
break
end
--ID Fed Holidays
begin
update #CACFederalReserverHolidays
set BankHoliday = 'Y',
HolidayName = 'New Year''s Day'
where DATEPART(day,Date) = 1
and DATEPART(month,Date) = 1
and DATEPART(Dw,Date) between 2 and 6
update #CACFederalReserverHolidays
set BankHoliday = 'Y',
HolidayName = 'New Year''s Day'
where DATEPART(day,Date) = 1
and DATEPART(month,Date) = 1
and DATEPART(Dw,Date) = 2
end
begin
-- MLK Day, 3rd Mon in January
update #CACFederalReserverHolidays
set BankHoliday = 'Y',
HolidayName = 'Martin Luther King Day'
where DATEPART(day,Date) between 15 and 21
and DATEPART(month,Date) = 1
and DATEPART(Dw,Date) = 2
end