【问题标题】:Insert multiple rows into SQL Server based on start and end dates根据开始和结束日期将多行插入 SQL Server
【发布时间】:2012-11-04 22:29:39
【问题描述】:

我需要在基于Start DateEnd Date 文本框的SQL Server 数据库中插入几行。

例如tbStartDate.Text = "25/12/2012"tbEndDate.Text = "29/12/2012" 因此我需要为以下日期插入单独的行:

25/12/2012
26/12/2012
27/12/2012
28/12/2012
29/12/2012

请您帮助我实现此目的所需的 T-SQL 吗?

【问题讨论】:

    标签: asp.net sql-server tsql


    【解决方案1】:

    一如既往,有几种方法。以下是其中一些:

    1. 您可以在应用程序中编写代码,循环遍历这些天并每天插入一条记录。 (通常是最糟糕的设计)

    2. 您可以调用一些 SQL 脚本在数据库中完成所有操作。

    3. 您可以将 SQL 脚本封装在存储过程中,并传入开始和结束日期,然后让存储过程为您执行此操作。

    4. 您可以交叉联接到预先存在的计数表并使用它来生成记录。

    如果可以的话

    -您正在使用的 SQL Server 版本

    -表格是什么样子的

    -无论你使用的是 C# 还是 VB

    那么我们可以提供进一步的帮助,因为将日期传递到数据库中可能很困难。如果您不验证它们可能会特别困难。

    无论如何,这里是你的选项 3。

    CREATE PROC dbo.t_test 
    @StartDate DATETIME,
    @EndDate DATETIME
    AS
    
    WHILE @StartDate <= @EndDate
    BEGIN
        INSERT INTO YourTable(YourDateField) VALUES (@StartDate)
        SET @StartDate = DATEADD(d,1,@StartDate)
    END
    

    然后您需要从 ASP.Net 调用此存储过程(称为 dbo.t_test)并将您的两个日期参数作为日期传递。

    【讨论】:

    • SQL 2012,请参阅此 SQL Fiddle - sqlfiddle.com/#!6/b8f2e/6/0 了解表结构,我正在使用 VB.Net
    • 嗯...您已经将答案标记为正确,但无论如何,当您只提供日期时,您可能应该考虑在所有其他非空字段中您想要什么。跨度>
    • 我已将您的 SP 建议更改为正确答案,因为这正是我所需要的!!!太好了 - 谢谢!
    • 哦,谢谢!我刚刚意识到我在评论中留下了误导性的评论,所以我把它删除了。
    【解决方案2】:
    Declare @Startdate datetime
    Select @Startdate='20121025'
    While @Startdate<='20121029'
        begin
          if not exists(select * from dummy where DATE=@Startdate)
            insert into dummy (date) values (@Startdate)
            set @Startdate=@Startdate + 1
        end;
    

    【讨论】:

    • 这可以完美地使用 SSMS 但是我将从 asp.net 传递开始和结束日期的参数 - 我看不到传递结束日期的方法 - 有什么想法吗?谢谢!
    • @James,把上面的变成带有参数startDate,EndDate的存储过程并传入
    • @Greg - 感谢您的快速响应!我对 SQL 相当陌生,所以不确定如何/做什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多