Reputation: 37106
I have the following sql:
;WITH DatesCTE AS
(
SELECT CAST('2016-01-01' AS DATE) AS [workingDays]
UNION ALL
SELECT DATEADD(DAY, 1, workingdays)
FROM DatesCTE
WHERE DATEADD(DAY, 1, workingdays) < '2017-01-01'
)
insert into dbo.tWorkingDays
(date,
CASE ((DATEPART(dw, workingDays) + @@DATEFIRST) % 7) NOT IN (0, 1) when TRUE THEN 1,
ELSE 0
END
)
SELECT *
FROM DatesCTE
WHERE ((DATEPART(dw, workingDays) + @@DATEFIRST) % 7) NOT IN (0, 1)
OPTION (MAXRECURSION 366)
and following table:
CREATE TABLE [dbo].[tWorkingDays]
(
[date] [date] NOT NULL,
[is_business_day][bit] NOT NULL DEFAULT 1,
CONSTRAINT [PK_tWorkingDays]
PRIMARY KEY CLUSTERED ([date] ASC)
) ON [PRIMARY]
When I try to execute request I see following:
Msg 156, Level 15, State 1, Line 14
Incorrect syntax near the keyword 'CASE'.
What did I do wrong ?
Upvotes: 1
Views: 965
Reputation: 122032
;WITH DatesCTE AS (
SELECT CAST('20160101' AS DATE) AS [workingDays]
UNION ALL
SELECT DATEADD(DAY, 1, workingdays)
FROM DatesCTE
WHERE DATEADD(DAY, 1, workingdays) < '2017-01-01'
)
INSERT INTO dbo.tWorkingDays (date, is_business_day)
SELECT *, CASE WHEN (DATEPART(dw, workingDays) + @@DATEFIRST) % 7 NOT IN (0, 1) THEN 1 ELSE 0 END
FROM DatesCTE
--WHERE (DATEPART(dw, workingDays) + @@DATEFIRST) % 7 NOT IN (0, 1)
OPTION (MAXRECURSION 366)
Upvotes: 1
Reputation: 1661
Looks like you got the field list (the fields you're inserting into) mixed up with the select list (the values you want to insert). It should look like this:
;WITH DatesCTE
AS (
SELECT CAST('2016-01-01' AS DATE) AS [workingDays]
UNION ALL
SELECT DATEADD(DAY, 1, workingdays)
FROM DatesCTE
WHERE DATEADD(DAY, 1, workingdays) < '2017-01-01'
)
insert into dbo.tWorkingDays
(date, is_business_day)
SELECT workingDays,
CASE WHEN ((DATEPART(dw, workingDays) + @@DATEFIRST) % 7) NOT IN (0, 1) THEN 1 ELSE 0
END
FROM DatesCTE
WHERE ((DATEPART(dw, workingDays) + @@DATEFIRST) % 7) NOT IN (0, 1)
OPTION (MAXRECURSION 366)
You probably don't want the WHERE clause and the CASE in the same query, but the quoted code should at least resolve the syntax error.
Upvotes: 1