2017-02-08 16 views
1
create procedure Task_request @Tstart datetime, @Tend datetime 
    as 
DECLARE @dummy TABLE(ID INT Identity, task_number nvarchar(50) , 
Pad_id VARCHAR(10) ,startdate datetime,enddate datetime, 
    previous_value float, next_value float,DCDC_OUTPUT_AVG float,DOWNTIME_IN_MINS int) 
declare @pdate datetime 
declare @previous_value FLOAT 
declare @next_value FLOAT 
DECLARE @end_time datetime 
declare @loopdate datetime 
declare @padid varchar(10) 
declare @dc_dc float 
declare @tasknumber nvarchar(50) 
set @loopdate = '2001-01-01' 
set @pdate = '2016-10-01 01:00:00' 

SET @tasknumber = '0' 

while exists (select DCDC_OUTPUT_AVG,TASK_NUMBER 
from I_TASK T, I_HOURLY_DATA F,I_DATE D, I_SITE_LOCATION P 
where F.D_DATE = D.ID AND F.D_PWM_LOCATION = P.ID 
AND T.SITE_ID like P.NAME+'%' 

AND D.DATE_KEY between cast(TASK_CREATION_DATE as date) 
AND dateadd("d",1,CAST(coalesce(ACCEPTED_DATE, working_date) AS DATE)) 
and task_priority > '01' and TASK_PRIORITY <'06' 
and TASK_CLOSED_DATE between @Tstart and @Tend 
and TASK_NUMBER > @tasknumber 
) 

Begin 

select top 1 @pdate=DATEADD(hour, D_TIME_OF_DAY-1, d.date_key), 
@tasknumber  = t.TASK_NUMBER 
from I_TASK T, I_HOURLY_DATA F,I_DATE D, I_SITE_LOCATION P 
where F.D_DATE = D.ID AND F.D_PWM_LOCATION = P.ID 
AND T.SITE_ID like P.NAME+'%' 
AND D.DATE_KEY between cast(TASK_CREATION_DATE as date) 
AND dateadd("d",1,CAST(coalesce(ACCEPTED_DATE, working_date) AS DATE)) 
and task_priority > '01' and TASK_PRIORITY <'06' 
and TASK_CLOSED_DATE between @Tstart and @Tend 
and DOWNTIME_IN_MINS >0 
and TASK_NUMBER > @tasknumber 
order by task_number, SITE_ID, TASK_CREATION_DATE, d.Date_key, D_TIME_OF_DAY 


print 'testing' 
print @pdate 
print @tasknumber 

select top 1 @previous_value=DCDC_OUTPUT_AVG 
from I_TASK T, I_HOURLY_DATA F,I_DATE D, I_SITE_LOCATION P 
where F.D_DATE = D.ID AND F.D_PWM_LOCATION = P.ID 
AND T.SITE_ID like P.NAME+'%' 
AND D.DATE_KEY between cast(TASK_CREATION_DATE as date) AND 
dateadd("d",1,CAST(coalesce(ACCEPTED_DATE, working_date) AS DATE)) and 
task_priority > '01' and TASK_PRIORITY <'06' 
and TASK_CLOSED_DATE between @Tstart and '2016-11-01' 
    AND DATEADD(hour, D_TIME_OF_DAY-1, d.date_key) =    DATEADD("HH",-1,@pdate) 
    and [email protected] 

    print @previous_value 
    print DATEADD("HH",-1,@pdate) 

    select top 1 @next_value=DCDC_OUTPUT_AVG, 
@end_time=DATEADD(hour, D_TIME_OF_DAY-1, d.date_key) 
from I_TASK T, I_HOURLY_DATA F,I_DATE D, I_SITE_LOCATION P 
where F.D_DATE = D.ID AND F.D_PWM_LOCATION = P.ID 
AND T.SITE_ID like P.NAME+'%' 
AND D.DATE_KEY between cast(TASK_CREATION_DATE as date) 
AND dateadd("d",1,CAST(coalesce(ACCEPTED_DATE, working_date) AS DATE)) and 
task_priority > '01' and TASK_PRIORITY <'06' 
    and TASK_CLOSED_DATE between @Tstart and @Tend 
    and DCDC_OUTPUT_AVG>=0.6*@previous_value 
    AND DATEADD(hour, D_TIME_OF_DAY-1, d.date_key) > @pdate 
    and [email protected] 


    print @next_value 
print datediff("hh", @pdate, @end_time) 

SET @loopdate = @pdate 
if @previous_value>0 and @next_value>0 

begin 
INSERT INTO @dummy VALUES(@id,tasknumber,@padid, 
@pdate,@end_time,@previous_value,@next_value,@dc_dc,@DOWNTIME_IN_MINS) 
End 
End 

SELECT t1.ID,t1.task_number ,t1.Pad_id , 
t1.startdate ,t1.enddate , t1.previous_value , t1.next_value ,  t1.DCDC_OUTPUT_AVG,t1.DOWNTIME_IN_MINS, 
datediff(hour,t1.startdate,t1.enddate) 
FROM @dummy t1 

タイムスタンプの異なる新しいレコードが追加されるたびに新しいIDで更新されるように、IDの増分を作成しようとしています。ID列を使用して新しいレコードを一時テーブルに挿入する

しかし、私はそれを行うことができません。

これはエラーです。 'テーブルのID列の明示的な値は、列リストが使用され、IDENTITY_INSERTがONの場合にのみ指定できます。'

私はこの試みた:私はreciving午前誤りがある

SET IDENTITY_INSERT id ON 
    INSERT INTO @dummy VALUES(@id, @tasknumber ,@padid, 
    @pdate,@end_time,@previous_value, 
    @next_value,@dc_dc,@DOWNTIME_IN_MINS) 
    SET IDENTITY_INSERT id OFF 

:「を。それが存在しないか、またはあなたが権限を持っていないため、オブジェクト 『ID』を見つけることができません」

私は、この手順を実行します。私は挿入され、それぞれの新しいレコードをベースID列でレコードを更新する際に助けが必要

exec task_request '2016-10-01','2016-10-11' 

+0

'SET IDENTITY_INSERT [database_name。 [schema_name]。 ]テーブル{ON | OFF} 'テーブルではなく、列を指定する必要があります。 – Serg

+0

私は一時的なテーブル@ダミーを使用しています –

+0

これは私が得るエラーです: '@ダミー'の近くの構文が正しくありません。私が行った変更は:SET IDENTITY_INSERT @dummy ON –

答えて

1

あなた@dummyはそれがIDENTITY_INSERTエラーだかまったくidentity列を、持っていないありがとう!実際にidentity列がある場合は、IDENTITY_INSERTのON/OFFはできません。メッセージ102、レベル15、状態1、行9付近に正しくない構文 '@tmp'

でテーブル変数は、SET IDENTITY INSERTコマンドエラーを て使用する場合の接続項目https://connect.microsoft.com/SQLServer/feedback/details/757012/set-identity-insert-on-table-variables

を参照してください。

"設計通りに"終了しました。

+0

私は以前と同じエラーが発生しています。 –

+0

ありがとうございました...それを得ました –

関連する問題