if exists (select * from sysobjects where id = object_id(N'[dbo].[HuiZong]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[HuiZong]
go
declare @sdate as datetime
declare @edate as datetime
set @sdate = '2010-01-01'
set @edate = '2010-01-31'--如果date不确定,用动态SQL。
declare @sql varchar(8000)
set @sql = 'select person_id,card_no,person_no,person_name,type_no,dept_id '
select @sql = @sql + ' , max(case date when ''' + date + ''' then eat else 0 end) [' + date + ']'
from (select convert(varchar(10),dateadd(dd,num,@sdate),120) date from (select isnull((select count(1) from sysobjects where id<t.id),0) as num from sysobjects t) a where dateadd(dd,num,@sdate)<=@edate) as a
set @sql = @sql + ' , sum(eat) 匯總 into HuiZong from V_XFDaly group by person_id,card_no,person_no,person_name,type_no,dept_id'
exec(@sql) 这样的SQL语句怎么改写为存储过程
谢谢

@sdate @edate 都为datetime变量

解决方案 »

  1.   

    create proc my_proc @sdate datetime , @edate datetime
    as
    begindeclare @sql varchar(8000)
    set @sql = 'select person_id,card_no,person_no,person_name,type_no,dept_id '
    select @sql = @sql + ' , max(case date when ''' + date + ''' then eat else 0 end) [' + date + ']'
    from (select convert(varchar(10),dateadd(dd,num,@sdate),120) date from (select isnull((select count(1) from sysobjects where id<t.id),0) as num from sysobjects t) a where dateadd(dd,num,@sdate)<=@edate) as a
    set @sql = @sql + ' , sum(eat) 匯總 into HuiZong from V_XFDaly group by person_id,card_no,person_no,person_name,type_no,dept_id'
    exec(@sql) end
      

  2.   

    create proc pro_test
        @sdate as datetime,
        @edate as datetime
    as 
    if exists (select * from sysobjects where id = object_id(N'[dbo].[HuiZong]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[HuiZong]--如果date不确定,用动态SQL。
    declare @sql varchar(8000)
    set @sql = 'select person_id,card_no,person_no,person_name,type_no,dept_id '
    select @sql = @sql + ' , max(case date when ''' + date + ''' then eat else 0 end) [' + date + ']'
    from (select convert(varchar(10),dateadd(dd,num,@sdate),120) date from (select isnull((select count(1) from sysobjects where id<t.id),0) as num from sysobjects t) a where dateadd(dd,num,@sdate)<=@edate) as a
    set @sql = @sql + ' , sum(eat) 匯總 into HuiZong from V_XFDaly group by person_id,card_no,person_no,person_name,type_no,dept_id'
    exec(@sql) select * from HuiZong
      

  3.   


    if object_id('p_test') is not null
      drop proc p_test 
    go
    create proc p_test 
    @sdate datetime,
    @edate datetime
    as
    --如果date不确定,用动态SQL。
    declare @sql varchar(8000)
    set @sql = 'select person_id,card_no,person_no,person_name,type_no,dept_id '
    select @sql = @sql + ' , max(case date when ''' + date + ''' then eat else 0 end) [' + date + ']'
    from (select convert(varchar(10),dateadd(dd,num,@sdate),120) date from (select isnull((select count(1) from sysobjects where id<t.id),0) as num from sysobjects t) a where dateadd(dd,num,@sdate)<=@edate) as a
    set @sql = @sql + ' , sum(eat) 匯總 into HuiZong from V_XFDaly group by person_id,card_no,person_no,person_name,type_no,dept_id'
    exec(@sql) 
    go
      

  4.   

    if object_id('p_test') is not null
      drop proc p_test 
    go
    create proc p_test 
    @sdate datetime,
    @edate datetime
    as
    if object_id(N'[dbo].[HuiZong]') is not null
       drop table [dbo].[HuiZong]
    --如果date不确定,用动态SQL。
    declare @sql varchar(8000)
    set @sql = 'select person_id,card_no,person_no,person_name,type_no,dept_id '
    select @sql = @sql + ' , max(case date when ''' + date + ''' then eat else 0 end) [' + date + ']'
    from (select convert(varchar(10),dateadd(dd,num,@sdate),120) date from (select isnull((select count(1) from sysobjects where id<t.id),0) as num from sysobjects t) a where dateadd(dd,num,@sdate)<=@edate) as a
    set @sql = @sql + ' , sum(eat) 匯總 into HuiZong from V_XFDaly group by person_id,card_no,person_no,person_name,type_no,dept_id'
    exec(@sql) 
    go