【问题标题】:Insert multiple rows from a date range从日期范围插入多行
【发布时间】:2022-01-21 07:31:38
【问题描述】:

我想为一个日期范围内的每个日期插入多行

我有一张桌子

CREATE TABLE [dbo].[Booked] (
    [BookedId] [bigint] IDENTITY (1, 1) NOT NULL,
    [BookedFor] [nvarchar] (50) NOT NULL,
    [BookedWhen] [smalldatetime] NOT NULL,
    [DeskName] [varchar] (10) NOT NULL
) ON [PRIMARY]

从单个语句中,我想在 6 行以下的情况下插入多行,每个日期从以下信息中插入一个

Declare
  @StartDate smalldatetime = '2022-01-01'
, @EndDate   smalldatetime = '2022-01-06'
, @BookedFor nvarchar(50)  = 'Mr Smith'
, @DeskName  varchar(10)   = '3'

让行看起来像

BookedId BookedFor BookedWhen DeskName
1 Mr Smith 2022-01-01 3
2 Mr Smith 2022-01-02 3
3 Mr Smith 2022-01-03 3
4 Mr Smith 2022-01-04 3
5 Mr Smith 2022-01-05 3
6 Mr Smith 2022-01-01 3

任何指针?

【问题讨论】:

  • 使用计数或数字表.....
  • 根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。

标签: sql sql-server


【解决方案1】:
CREATE TABLE [#Booked] (
    [BookedId] [bigint] IDENTITY (1, 1) NOT NULL,
    [BookedFor] [nvarchar] (50) NOT NULL,
    [BookedWhen] [smalldatetime] NOT NULL,
    [DeskName] [varchar] (10) NOT NULL
)


Declare
  @StartDate smalldatetime = '2022-01-01'
, @EndDate   smalldatetime = '2022-01-06'
, @BookedFor nvarchar(50)  = 'Mr Smith'
, @DeskName  varchar(10)   = '3'


;WITH Dates(day) AS 
(
    SELECT CAST(@StartDate as Date) as day
    UNION ALL
    SELECT CAST(DATEADD(day, 1, day) as Date) as day
    FROM Dates
    WHERE CAST(DATEADD(day, 1, day) as Date) < @EndDate
)
INSERT INTO #Booked 
SELECT @BookedFor, [day], @DeskName FROM dates;

SELECT * FROM #Booked

Create days between two dates

【讨论】:

    猜你喜欢
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多