问题描述
|
我想创建sql语句(可能是存储过程)以在数据库表中插入多行。对于一年中的日期,取决于所选的星期数。
例如:
如果选择的周数= 4
sql语句应为当前日期在数据库表中插入新行,为每行的当前日期增加4周,如下所示:
CompanyID DateStart ServiceType
101 todayDate 0091
101 TodayDate + 4weeks 0091
101 TodayDate + 8weeks 0091
101 TodayDate + 12weeks 0091
. . .
. . .
. . .
101 TodayDate + #weeks 0091
(until this yearEnd only)
**
请注意:
1。
在执行上述脚本之前,我想检查上一年的同一数据库表中是否有任何记录
公司(#101)的serviceType(#0091)。如果有任何记录,我想删除这些记录。
2。
我还想确保如果公司(101)的服务类型(#0091)在当年已经存在,那么我不应该在数据库表中插入新行。
非常感谢您抽出宝贵时间来帮助您理解我的问题以产生适当的结果。
解决方法
您可以尝试执行以下操作来生成要插入的行:
DECLARE @CurrentYear INT = YEAR(GETDATE())
;WITH DatesToInsert AS
(
SELECT
101 AS \'CompanyID\',GETDATE() AS \'TodayDate\',\'0091\' AS \'ServiceType\'
UNION ALL
SELECT
101 AS \'CompanyID\',DATEADD(WEEK,4,dti.TodayDate) AS \'TodayDate\',\'0091\' AS \'ServiceType\'
FROM
DatesToInsert dti
WHERE
YEAR(DATEADD(WEEK,dti.TodayDate)) = @CurrentYear
)
SELECT * FROM DatesToInsert
通过该CTE(公用表表达式),您可以将值插入表中并检查您具有的所有其他要求。当然,您可以使DATEADD
呼叫中的号码4
可配置,例如作为包含此CTE来处理插入内容的存储过程的参数。