2013-07-11 35 views
2

我想解析一個包含像創建函數和存儲過程的命令的一種大SQL腳本。我想在我找到GO語句(我想使用普通的ado.net而不是SMO來執行它)時以字符串拆分文件。正則表達式來拆分SQL腳本,但忽略拆分評論腳本下去GO

問題是,到目前爲止我還沒有找到合適的正則表達式。使用一個簡單的\bGO\b忽略大小寫將會分割它。但也將拆分都去(S)在註釋裏像

/*****************************\ 
sql statement 1 
GO 
sql statement 2 
GO 
\****************************/ 

我的要求是:不要分裂劇本,如果它是在評論即使腳本包含GO語句。假設我的整個腳本如下:

sql statement 1 
GO 
/*****************************\ 
sql statement 2 
GO 
sql statement 3 
GO 
\****************************/ 
sql statement 4 

預期的輸出應該像

First command : 
sql statement 1 

Second command : 

/*****************************\ 
sql statement 2 
GO 
sql statement 3 
GO 
\****************************/ 
sql statement 4 

對此有什麼想法?

在此先感謝。 :)

回答

0

您可以刪除所有的意見,然後由GO分裂:

/\/\**\\[^\\]*?\\\**\// # match the comment 

\/\**\\ # matches /*****\ 
[^\\]*? # any text within the comments 
\\\**\/ # matches \*****/ 

刪除上述發現和GO結果拆分。

+0

我認爲他需要評論中的「GO」保留。 –

+0

感謝mishik和Radu的迴應。正如拉杜提到的,我想保留帶有未註釋腳本的評論腳本。例如,如果我有一個腳本來創建一個存儲過程或觸發器,可以在腳本中間註釋一些腳本。在運行此腳本來創建存儲過程或觸發器時,我應該保留註釋腳本。我的意思是一旦在數據庫中創建了存儲過程或觸發器,我應該能夠在存儲過程/觸發器的腳本中看到註釋過的腳本。謝謝 – user2549745