2013-06-25 52 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