2011-09-30 166 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