日期:2014-05-18  浏览次数:20600 次

declare @start datetime是写在函数中吗
如题。像是下面的SQL代码,是写在存储过程中调用的,还是在函数中写的啊。我想写好在C#程序中调用,怎么调用呢。变量分别是开始时间和结束时间。



--根据查询的列创建一个临时表
create table table_111201(id int)
insert into table_111201 select 1
go

create table table_111202(id int)
insert into table_111201 select 2
go

create table #temp(id int) -- 具体的字段

declare @start datetime
declare @end datetime
declare @sql varchar(8000)
set @start = '2011-12-01'
set @end = '2011-12-02'

select @sql = isnull(@sql+' union all ','')+'select * from table_'+date
from(
  select right(convert(varchar(8),dateadd(dd,number,@start),112),6) date
  from master..spt_values
  where [type] = 'p' and number between 0 and datediff(dd,@start,@end)
)t

insert into #temp exec(@sql)

select * from #temp
--select 其他查询,根据#temp临时表

drop table #temp,table_111201,table_111202

/***************

id
-----------
1
2

(2 行受影响)



------解决方案--------------------
SQL code

create proc get_temp
@start datetime,
@end datetime
as
begin
declare @sql varchar(8000)

select @sql = isnull(@sql+' union all ','')+'select * from table_'+date
from(
  select right(convert(varchar(8),dateadd(dd,number,@start),112),6) date
  from master..spt_values
  where [type] = 'p' and number between 0 and datediff(dd,@start,@end)
)t

exec(@sql)
end

------解决方案--------------------
动态必须写在过程里
函数不支持
------解决方案--------------------
写成存储过程即可,不需要用函数。
------解决方案--------------------
动态的,用存储过程吧