说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何改写exec,大力看看

编辑:说三道四文库 发布时间:2018-07-18 04:59
HTML文档下载 WORD文档下载 PDF文档下载
目的就是将变量作为列名,但我不会改写复杂的exec,大哥帮忙看看
declare @st nvarchar(6)
declare @en nvarchar(6)
set @st = '成都'
set @en = '上海'

select c.车次,
convert(char(5),a.发车时刻,108) AS @st出发,
convert(char(5),b.到站时刻,108) AS @en到达 ,


case when datediff(minute,a.发车时刻,b.到站时刻)>=0 

then cast(24*(b.天数-a.天数)+datediff(minute,a.发车时刻,b.到站时刻)/60 as varchar(2))+'.'+cast(datediff(minute,a.发车时刻,b.到站时刻)%60 as varchar(2))+''''

else cast(24*(b.天数-a.天数)-1+datediff(minute,a.发车时刻,b.到站时刻)/60 as varchar(2))+'.'+cast((1440*(b.天数-a.天数)+datediff(minute,a.发车时刻,b.到站时刻))%60 as varchar(2))+''''
end as 旅时,

里程=b.公里数-a.公里数,

p.硬座+','+ p.软座 as  '硬座,软座',
p.硬卧上+','+ p.硬卧中 + ',' + p.硬卧下  as '硬卧(上,中,下)',
p.软卧上+','+p.软卧下 as '软卧(上,下)'

from (select * from message2 where 经由站=@st) as a,
(select * from message2 where 经由站=@en) as b,
(select * from checi) as c,
(select * from piaojia2) as p,
(select * from station where 站点=@st) as s1,
(select * from station where 站点=@en) as s2
where a.车次ID=b.车次ID and a.车次ID=c.车次ID and a.站次<b.站次 and
      s1.站点ID=p.起点ID and s2.站点ID=p.终点ID and a.车次ID=p.车次ID
order by 旅时
exec (' select * from table' + @column +'=' + @)
try:



declare @st nvarchar(6)
declare @en nvarchar(6)
set @st = '成都'
set @en = '上海'

exec('select c.车次,
convert(char(5),a.发车时刻,108) ['+@st出发+'],
convert(char(5),b.到站时刻,108) ['+@en到达+' ,


case when datediff(minute,a.发车时刻,b.到站时刻)>=0 

then cast(24*(b.天数-a.天数)+datediff(minute,a.发车时刻,b.到站时刻)/60 as varchar(2))+''.''+cast(datediff(minute,a.发车时刻,b.到站时刻)%60 as varchar(2))+''''''''

else cast(24*(b.天数-a.天数)-1+datediff(minute,a.发车时刻,b.到站时刻)/60 as varchar(2))+''.''+cast((1440*(b.天数-a.天数)+datediff(minute,a.发车时刻,b.到站时刻))%60 as varchar(2))+''''''''
end as 旅时,

里程=b.公里数-a.公里数,

p.硬座+'',''+ p.软座 as  [硬座,软座],
p.硬卧上+'',''+ p.硬卧中 + ',' + p.硬卧下  as [硬卧(上,中,下)],
p.软卧上+'',''+p.软卧下 as [软卧(上,下)]

from (select * from message2 where 经由站='''+@st+''') as a,
(select * from message2 where 经由站='''+@en+''') as b,
(select * from checi) as c,
(select * from piaojia2) as p,
(select * from station where 站点='''+@st+''') as s1,
(select * from station where 站点='''+@en+''') as s2
where a.车次ID=b.车次ID and a.车次ID=c.车次ID and a.站次<b.站次 and
      s1.站点ID=p.起点ID and s2.站点ID=p.终点ID and a.车次ID=p.车次ID
order by 旅时')
大力哥就是厉害啊,就错了一个标点,哈哈。。。
能不能贴个exec相关的帖子出来学习学习;)
看看这个:

Create Procedure GetMaxID
@TableName varchar(100), @ID int output
as
begin
declare @sql nvarchar(1000)
set @sql='select @ID = max(ID) from '+@TableName
exec sp_executesql @sql,N'@id int output',@id output
------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^OK?
end
学习!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘