使用T-sql在数据库表中插入多行

问题描述

| 我想创建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来处理插入内容的存储过程的参数。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...