/////////////////////////////////动态SQL/////////////////////////////////

mopeboy 2006-08-28 04:27:25
现在正在学习动态SQL
对于里面很多东西都不是很明白!
连''这样的怎么用现在也看不明白,还有里面很多的其他的东西更是!
各位大侠能否讲解一下!!!
...全文
240 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
itblog 2006-08-28
  • 打赏
  • 举报
回复
..........
Linux_9 2006-08-28
  • 打赏
  • 举报
回复
呵呵!顶!
specialsoldier 2006-08-28
  • 打赏
  • 举报
回复
select * from #temp 就是你想要的结果集了 什么时候取都可以
specialsoldier 2006-08-28
  • 打赏
  • 举报
回复
set @s='select * into #temp from ('+@s+')a'
EXEC(@S)
这样你原来的select结果集就存入了中间表#temp中了.记得最后"drop table #temp"
being21 2006-08-28
  • 打赏
  • 举报
回复
呵呵!
''''''这个现在点不明白!!!不知道规则啊!!
being21 2006-08-28
  • 打赏
  • 举报
回复
不好意思,楼主的号码是我表哥的,我借来用用。有点混乱!!!
playwarcraft 2006-08-28
  • 打赏
  • 举报
回复
我來找幾個例子:
http://community.csdn.net/Expert/topic/4874/4874165.xml?temp=.4546625
specialsoldier 2006-08-28
  • 打赏
  • 举报
回复
前天做的一个问题,不知道能不能做被你照着画老虎的猫:
----------------------------行列转换之:行到列,且自动处理原列名为一列
create table hzl (name char(10),km char(10),cj char(10))
go
insert hzl values('张三','语文',80)
insert hzl values('张三','数学',86)
insert hzl values('张三','英语',75)
insert hzl values('李四','语文',78)
insert hzl values('李四','数学',85)
insert hzl values('李四','英语',78)

---------------拼装sql语句实现动态查找列名
declare @sql varchar(8000),@tbName varchar(40)
set @tbName = 'hzl'--这里填你的表名
set @sql = ''
select @sql = @sql +' union select '''+name+''' 原列名, '+name+' 值 from '+@tbName
from (
select a.name from syscolumns a
join sysobjects b on a.id=b.id
and b.xtype='U' and b.name=@tbName
)a
set @sql=stuff(@sql,1,6,'')
exec(@sql)

-----------删除测试
drop table hzl

---------------结果
原列名 值
cj 75
cj 78
cj 80
cj 85
cj 86
km 数学
km 英语
km 语文
name 李四
name 张三
being21 2006-08-28
  • 打赏
  • 举报
回复
郁闷!!!
Declare @S Varchar(8000)
Set @S=''

Select @S=@S+',SUM(Case When Left([受理类型编码],1)='''+[受理类型编码]+''' Then 1 Else 0 End) As '''+[受理类型编码]+''''
From (Select Distinct Convert(Varchar(1),[受理类型编码]) As [受理类型编码] From TAcceptEvent) A Order By [受理类型编码]

Select @S='Select tp.姓名'+@S+' From TAcceptEvent tac left join Tperson tp on tp.编码 = tac.责任受理人编码 Group By tp.姓名'

EXEC(@S)
GO

我照猫画虎出来了一个,但是现在需要在下面的统计中用到上面统计的内容,必须把这些合并起来。

select

tt.责任调度人编码,
中止任务 = sum(case when tt.出车结果编码 = 2 then 1 else 0 end),
放空车 = sum(case when tt.出车结果编码 = 3 then 1 else 0 end),
正常完成 = sum(case when tt.出车结果编码 = 4 then 1 else 0 end)
-- 受理事件类型 ?

from Ttask tt
inner join TAcceptEvent tac on tac.事件编码 = tt.事件编码 and tac.受理序号 = tt.受理序号
left join TAlarmEvent tae on tae.事件编码 = tt.事件编码
left join TZAcceptType tzac on tzac.编码 = tac.受理类型编码
left join Tperson tp on tp.编码 = tt.责任调度人编码

group by tt.责任调度人编码
playwarcraft 2006-08-28
  • 打赏
  • 举报
回复
寫動態SQL要習慣先print @sql
查看此@SQL是否符合語法以及需求...
子陌红尘 2006-08-28
  • 打赏
  • 举报
回复
无非是拼接字符串,就当是在造句。
zjcxc 元老 2006-08-28
  • 打赏
  • 举报
回复
多看些例子, 自己尝试写一些就行了.

说白了, 动态语句无非是在普通的语句外面套一层 exec

对于交叉表来说, 关键在于如何生成动态处理的sql语句, 而不是动态语句本身.
Robin_ftsafe 2006-08-28
  • 打赏
  • 举报
回复
动态语句,顾名思义,就是动态构造SQL语句, 你心中如果有了要构造出来的语句的原型,那么如何构造那就相当轻松. 所以还是去学 t-sql

如果临时急用,就搜索"行转列"然后照猫画虎就可以了,最多是对几个表连表或子查询的结果进行转,将它们的结果看成一个表,那么是一样的.
turenjie 2006-08-28
  • 打赏
  • 举报
回复
declare @sql varchar(1000)
declare @intNum int
set @intNum = 1 -- 可动态改变呀
set @sql = 'select * from tablename where f1 = '+ @intNum
exec(@sql)
mopeboy 2006-08-28
  • 打赏
  • 举报
回复
呵呵,现在要用。因为要动态行转列。
Robin_ftsafe 2006-08-28
  • 打赏
  • 举报
回复
学好T-SQL就是了.
动态SQL也是执行的T-SQL.

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧