2012-11-04 149 views
1

我需要根据Start DateEnd Date文本框将几行插入到SQL Server数据库中。根据开始日期和结束日期在SQL Server中插入多行

E.G. 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来实现这一目标?

回答

2

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

  1. 您可以在应用程序中编写代码,循环使用日期并每天插入一条记录。 (通常是最差的设计)

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

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

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

如果您可以提供

的SQL Server版本-the您使用

- 什么表看起来像

- 不管你使用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),并且在两个日期指标的影响传递的日期。

+0

SQL 2012年,请参阅这个SQL小提琴 - http://sqlfiddle.com/#!6/b8f2e/6/0为表结构和我使用VB。净 – James

+0

呃...你已经标记了一个正确的答案,但无论如何,当你只提供一个日期时,你应该考虑你想要的所有其他非空字段。 –

+0

我已将您的SP建议更改为正确的答案,因为它完全是我要求的!非常好,谢谢! – James

2
Declare @Startdate datetime 
Select @Startdate='20121025' 
While @Startdate<='20121029' 
    begin 
     if not exists(select * from dummy where [email protected]) 
     insert into dummy (date) values (@Startdate) 
     set @[email protected] + 1 
    end; 
+0

这工作完美地使用SSMS,但我会通过参数从asp.net开始和结束日期 - 我不能看到一种方式来传递结束日期 - 任何想法?谢谢! – James

+2

@James,将上面的参数转换成存储过程,并使用参数startDate,EndDate并将它们传递给 – Greg

+0

@Greg - 感谢您的快速响应!我相当新的SQL,所以不知道如何/做什么 – James

相关问题