格式化t-sql語句(300分)

  • 主题发起人 主题发起人 eastweast
  • 开始时间 开始时间
E

eastweast

Unregistered / Unconfirmed
GUEST, unregistred user!
新接手一數據庫程序,在Client端使用了很多類似下面的T-SQL語句:
Select IsNull(B.ICode,A.ICode) As ICode,BQty From (Select ItemCode,DifCode=Case When Upper(Right(RTrim(ICode),3))='-BB' Then Left(ICode,len(ICode)-3) Else ICode End,BQty From Select distinct IsNull(E.ICode,B.ICode) As ICode,IsNull(A.BQty*D.BQty,A.BQty) As BQty From BP_Item A Inner Join Item B On A.ItemID=B.ID Left Join Bom C On B.ID=C.ItemID Left Join BomD D On C.ID=D.BomID Left Join Item E On D.ItemID=E.ID Where A.ID In (Select A.ID From Bom A Inner Join item B On A.IID=B.ID Where B.ICode='abcdef') And A.ID In (Select ID from PIDs('abceef','檢查'))) A) A Left Join (Select D.Code from OrderS a Left Join
CBom B On A.CBID=B.ID left Join CB_d C On B.ID=C.BomID left join item d on c.cid=d.id where a.sno='abcd0690095') B On A.DifCode=B.Code

以上語句要想搞明白是什麼意思,需要將以上T-sql代碼進行格式化為類似下面的形式:
Select IsNull(B.ICode,A.ICode) As ICode,BQty
From
(Select ItemCode,DifCode=Case When Upper(Right(RTrim(ICode),3))='-BB' Then Left(ICode,len(ICode)-3) Else ICode End,BQty From
(Select distinct IsNull(E.ICode,B.ICode) As ICode,IsNull(A.BQty*D.BQty,A.BQty) As BQty
From
BP_Item A Inner Join
Item B On A.ItemID=B.ID Left Join
Bom C On B.ID=C.ItemID Left Join
BomD D On C.ID=D.BomID Left Join
Item E On D.ItemID=E.ID
Where A.ID In (Select A.ID From Bom A Inner Join item B On A.IID=B.ID Where B.ICode='abcdef') And A.ID In (Select ID from PIDs('abceef','檢查'))) A
) A
Left Join
(Select D.Code
from
OrderS a Left Join
CBom B On A.CBID=B.ID left Join
CB_d C On B.ID=C.BomID left join
item d on c.cid=d.id
where a.sno='abcd0690095'
) B
On A.DifCode=B.Code

由於程序中使用了太多的這種雜亂的t-sql所以造成維護很麻煩.因此想寫一程序,經原始t-sql進行格式化.請各位不吝賜教.
此處不討論這些代碼放在客戶端的弊端.
使用過SourceFormatX這個軟件,但是不支持sql.
 
放到视图去执行 一下,他自动调格式
 
樓上說的,我測試了一下還真的可以.
300分全給你太可惜了.[:D]
雖說View裡面可以,但是格式比較固定,比如縮進的空格多少,每行顯示的長度等要是可以自由定義就好了.
還是請大家討論一下.稍後發分.
 
用EMS(EMS SQL Manager 2005 For SQL Server版),把文本复制到里面,选择文本后,右键菜单里有一项“格式化SQL”
 
达到效果就给分吧,这是你提问时给回答问题者的承诺,没什么可惜不可惜,何况你挣到的比他多,对吧?[:D]
 
楼上说的没错,我会把大部分的分给他。
我下了EMS(EMS SQL Manager 2005 For SQL Server版这个软件,确实是一款非常不错的软件,把相关的object都显示出来了。
不过比较搞笑的是。我格式化了一个很长的t-sql后,再execute的时候居然报错?
语法错误。看了一下,他居然把union all select 格式化成了Union AllSelect。不知道是不是因为破解版有问题。
 
发分了。
 
后退
顶部