使用T-sql在Database表中插入多行

时间:2011-05-25 15:30:40

标签: sql sql-server sql-server-2005 tsql

我想创建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)已经存在,那么我不应该在数据库表中插入新行。

非常感谢你帮助我花时间和理解我的问题以产生适当的结果。

1 个答案:

答案 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以处理插入的存储过程的参数。