2011-09-30 85 views
0

情况: 我有几个SSRS报告,其中我需要记录的sql代码。 为此,我需要一次又一次以完全相同的方式对代码进行格式化。sql嵌套选择解析

问题: 在我的一些报告,我有一个像

select outer 
from (
select outin 
from (
select inner 
from (
select innerMax 
from 
)z 
where 
)x 
where dateadd(d,12,getdate()) 
)y 
where 

结构和我想要的结果是

select outer 
from (
    select outin 
    from (
     select inner 
     from (
      select innerMax 
      from 
     )z 
     where 
    )x 
    where dateadd(d,12,getdate()) 
)y 
where 

但我有缩进问题嵌套查询的

如果你能为我提供例子,我会非常感激。 我用拆分,正则表达式,子...

问候

+0

的查询将有SQL-相似的机会是相当小的。看到它指的是哪个数据库,没有办法看到像sql那样的字符串文字。 至于评论:我写我的代码没有评论,并格式化它,以便它可以记录在外部文件。(半不好的做法,我知道) – ShadowFlame

+0

仍然,使用现有的工具,一个SQL解析器)是IMO的首选。看到我的答案。 –

回答

1

这是比你想象的棘手:分裂,子和正则表达式是不够可靠地解决这个问题。考虑SQL代码中的注释或字符串文字,这些文字可能包含看起来像SQL或含有括号的文本,这会混淆缩进级别。

更好的方法是使用SQL解析器。下面是与python-sqlparse演示:

#!/usr/bin/env python 
import sqlparse 

sql = """ 
select outer 
from (
select outin 
from (
select inner 
from (
select innerMax 
from 
)z 
where 
)x 
where dateadd(d,12,getdate()) 
)y 
where 
""" 

print sqlparse.format(sql, reindent=True) 

,它将打印:

select outer 
from 
    (select outin 
    from 
    (select inner 
     from 
     (select innerMax 
     from)z 
     where)x 
    where dateadd(d,12,getdate()))y 
where