2013-06-25 133 views
0

在我的asp.net应用程序我有SqlDataSource的具有以下插入查询:插入结果

INSERT INTO Invitations (PatientId, PlanId) 
SELECT TOP 10 Patients.Id, @PlanId 
FROM Patients 

所以基本上是从Patients表中得到10行,将它们插入(某些值)到Invitations表。 @PlanId是传递给SqlDataSource的附加参数。

我需要的是将值插入名为Time的第三列,其类型为time(0), not null。但是,我想是这样的以某种方式产生此值:

为(I = 0;我< 10; ++ⅰ)时间= @InitialTime + I *区间

因此,例如:

row 1: PatientId = 0; PlanId = 555; Time = 12:00 
row 2: PatientId = 1; PlanId = 555; Time = 12:05 
row 3: PatientId = 2; PlanId = 555; Time = 12:10 

所以我通过@InitialTime PARAM,并在此基础上产生的时间字段一些间隔...

是否有可能在MSSQL?

+0

你的意思是像'使用DateAdd(分钟,PatientId * @Interval,@InitialTime)'?或者,您是否期望'PatientId'是来自'select top'查询而没有'order by'子句的连续的基于零的值? – HABO

+0

你为什么要这样计算时间?它不会映射到输入的时间。你问在SQL中如何做到这一点? –

回答

1

试试这个,它应该工作:

INSERT INTO Invitations (PatientId, PlanId, [Time]) 
SELECT TOP 10 
    Patients.Id, 
    @PlanId, 
    DATEADD(MINUTE,(ROW_NUMBER() OVER (ORDER BY Patients.Id) -1) * 5 ,@InitialTime) AS [Time] 
FROM Patients 
0

我不是MS-SQL用户所有,

这个伪代码可以帮助

CREATE PROCEDURE InsertFromOtherTable 
AS 

DECLARE my_cur CURSOR FOR SELECT TOP 10 Patients.Id, @PlanId FROM Patients 

DECLARE @startTime DATETIME, @interval INT 

OPEN my_cur 

while (read_one_row_from_cursor) 
loop 
    -- insert the data into other table 
    -- increment the timer 
    -- continue loop to next row 
end loop; 

CLOSE my_cur