create procedure proc_test(@v_as_of_date date,
 @v_proc_id varchar,
 @v_proc_desc varchar,
 @v_row_count decimal = 0,
 @v_runFlag int,
 @v_sql_code varchar,
 @v_sql_str varchar =''
 )
asbegin
declare @v_start_time date,
@v_sysdate date;
set @v_sysdate = GETDATE();

case 
--正在运行
when @v_runflag = 0 then
insert into dbo.ETL_LOG
values(@v_as_of_date,
UPPER(rtrim(Ltrim(@v_proc_id))),
@v_proc_desc,
@v_sysdate,
null,
null,
0,
0,
@v_sql_code,
@v_sql_str)
--正确运行
when @v_runflag = 1 then
update dbo.ETL_LOG
set proc_desc=@v_proc_desc,
end_time=@v_sysdate,
run_time=isnull((@v_sysdate-start_time)*24*60*60,0),
row_count=@v_row_count,
run_flag=1,
sql_code=@v_sql_code,
sql_str=@v_sql_str
where as_of_date = @v_as_of_date
and proc_id=UPPER(rtrim(ltrim(@v_proc_id)))
and run_flag=0;
--运行错误
when @v_runflag = -1 then 
update dbo.ETL_LOG
set proc_desc=@v_proc_desc,
end_time=@v_sysdate,
run_time=isnull((@v_sysdate-@v_start_time)*24*60*60,0),
row_count=@v_row_count,
run_flag=-1,
sql_code=@v_sql_code,
sql_str=@v_sql_str
where as_of_date = @v_as_of_date
and proc_id=UPPER(rtrim(ltrim(@v_proc_id)))
and run_flag=0;
end
commit;
end
表是这样建的USE [Test]
GO/****** Object:  Table [dbo].[ETL_LOG]    Script Date: 06/04/2013 22:18:58 ******/
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GOSET ANSI_PADDING ON
GOCREATE TABLE [dbo].[ETL_LOG](
[as_of_date] [date] NULL,
[proc_id] [varchar](100) NULL,
[proc_desc] [varchar](400) NULL,
[start_time] [date] NULL,
[end_time] [date] NULL,
[run_time] [decimal](9, 0) NULL,
[row_count] [decimal](9, 0) NULL,
[run_flag] [decimal](1, 0) NULL,
[sql_code] [varchar](400) NULL,
[sql_str] [varchar](4000) NULL
) ON [PRIMARY]GOSET ANSI_PADDING OFF
GOsqlServer存储过程  存储SQL ServerSQL