【问题标题】:Insert multiple rows in Database table using T-sql使用 T-sql 在数据库表中插入多行
【发布时间】:2011-05-25 15:30:39
【问题描述】:

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

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

【问题讨论】:

  • 您使用的是 SQL Server 2005 还是 2008?你有两个标签.....
  • OK - 删除 SQL Server 2008 标签 ....
  • 嗨 Marc_S 非常好,非常简单。我在想我可能需要编写大查询来实现这个逻辑。我只是想确保我可以在执行“选择”语句之前编写插入语句。非常感谢

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


【解决方案1】:

您可以尝试这样的方法来生成要插入的行:

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(通用表表达式),您可以将值插入表中并检查您的所有其他要求。当然,您可以在 DATEADD 调用中将号码 4 设置为可配置的,例如作为包含此 CTE 的存储过程的参数来处理插入。

【讨论】:

    猜你喜欢
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2016-08-02
    相关资源
    最近更新 更多