Sql server SQL Server:在插入时使用case
我有以下sql:Sql server SQL Server:在插入时使用case,sql-server,switch-statement,Sql Server,Switch Statement,我有以下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 (da
;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)
当我尝试执行请求时,我看到以下内容:
味精156,15级,状态1,第14行
关键字“CASE”附近的语法不正确
我做错了什么?看起来您得到了要插入的字段列表和要插入的值的选择列表。应该是这样的:
;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)
您可能不希望WHERE子句和大小写出现在同一个查询中,但引用的代码至少应能解决语法错误。CASE when DATEPARTdw,workingDays+@@DATEFIRST%7不在0中,1则1 ELSE 0 END应该可以。@Loser不应该,逗号不应该在那里
;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)
;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)