解析sql语句

flygao85 2010-12-15 05:10:50
随意写一个sql语句,把sql语句涉及到的 关键字,表名,列名都得到,放在临时表中。

比如 select a.column1 from table1

用正则表达式好像不行。毕竟复杂sql语句太难了。因为包含子查询或者函数运算,或者转化。

感觉是个很大的难题。是不是要用到编译原理啊?求大神解答

...全文
178 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
飘零一叶 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 flygao85 的回复:]
楼上的做法就是目前我的做法。但是这种有缺陷。要读系统表,而且当有函数的时候就不行了。比如使用
select c1+c2 as c from table 那么插入到临时表的列名就是c,而不是我想要的c1和c2了。
[/Quote]不获取别名的话,情况很复杂啊
flygao85 2010-12-17
  • 打赏
  • 举报
回复
楼上的做法就是目前我的做法。但是这种有缺陷。要读系统表,而且当有函数的时候就不行了。比如使用
select c1+c2 as c from table 那么插入到临时表的列名就是c,而不是我想要的c1和c2了。
Hankuker 2010-12-16
  • 打赏
  • 举报
回复
强烈不懂
flygao85 2010-12-16
  • 打赏
  • 举报
回复
比如有这样一个语句
select column1,column2+column3,sum(column4)
from table1
join table2
on table1.key=table2.key
group by column1,column2+column3
having avg(column5)>1

现在需要把所有涉及到的表名和对应的列都找到。比如要找到列column1,column2,column3,column4,column5和表table1、table2。
唐诗三百首 2010-12-16
  • 打赏
  • 举报
回复
貌似要请<编译原理>来处理,大四时选修过,感觉很难(还好没挂).
单层的Select语句可能还好处理,问题是那些多层嵌套查询,关联查询,聚集查询,使用别名的不好处理.
建议方法如下,供参考.
1.把结果的1行插入临时表, select top 1 ... into [临时表] from ...
2.然后sp_mshelpcolumns [临时表]就能得到所有查询结果的字段.
天-笑 2010-12-16
  • 打赏
  • 举报
回复
楼主想干嘛? 是在模拟SQL 解析?
flygao85 2010-12-16
  • 打赏
  • 举报
回复
看来这个问题有点难了。退而求其次吧。给定一个select 得到后面设计到的列名
比如:

select
column1
,sum(column2)
,case when column3 then 1 else 0 end
,column4+column5

然后能解析出来column1,column2……column5 就可以了。

而且假定就只有 case 语句,聚集函数,+ - * / 四种简单的数学运算符。

使用存储过程实现,返回column1,column2……column5 的字符串就好了。这下应该略好解决了吧?

大神们呢
dawugui 2010-12-15
  • 打赏
  • 举报
回复
不知道问的什么,帮顶了.
claro 2010-12-15
  • 打赏
  • 举报
回复
真没看懂。
haitao 2010-12-15
  • 打赏
  • 举报
回复
sql输出个月历、年历、8皇后,都可以
但是要分解一个复制的sql语句,是有点强人所难了
-晴天 2010-12-15
  • 打赏
  • 举报
回复
把这个语句放在一个字符串中进行处理还是可以的.
flygao85 2010-12-15
  • 打赏
  • 举报
回复
已经加分了。求高手啊
wing7742 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yy1987316 的回复:]
比如有个表,叫做ffrom,你能有什么办法?
[/Quote]
太为难SQL了
yy1987316 2010-12-15
  • 打赏
  • 举报
回复
比如有个表,叫做ffrom,你能有什么办法?
yhtapmys 2010-12-15
  • 打赏
  • 举报
回复
...
Rockets_NBA 2010-12-15
  • 打赏
  • 举报
回复
帖子标题上边---管理菜单---帖子加分
flygao85 2010-12-15
  • 打赏
  • 举报
回复
这个问题好像太难了。我想加分怎么加啊?
Rockets_NBA 2010-12-15
  • 打赏
  • 举报
回复

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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