我想创建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)已经存在,那么我不应该在数据库表中插入新行。
非常感谢你帮助我花时间和理解我的问题以产生适当的结果。
答案 0 :(得分:3)
您可以尝试这样的方法来生成要插入的行:
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, 4, dti.TodayDate)) = @CurrentYear
)
SELECT * FROM DatesToInsert
从CTE(公用表表达式)中,您可以将值插入表中并检查您拥有的所有其他要求。当然,您可以将4
来电中的DATEADD
号码配置为可配置,例如作为包含此CTE以处理插入的存储过程的参数。