使用正則表達(dá)式匹配tsql注釋語(yǔ)句
讓我們來(lái)看一些例子:
--獲取表的count信息
select count(*) from T with(nolock)
--獲取特定值的count信息
select count(*) from T with(nolock)
where v = '--value'
--獲取表'T'的count信息
select count(*) from T with(nolock)
SELECT * from T --獲取表T
Where P
我們先來(lái)試著給出一個(gè)簡(jiǎn)單的匹配:
\-\-[^\r\n]*$
你會(huì)發(fā)現(xiàn),它連第二條的SQL也匹配到了,這是不對(duì)的??雌饋?lái),我們應(yīng)該排除"'"里面的, 我們?cè)賮?lái)改改:
\-\-[^\'\r\n]{0,}$
還是不對(duì),這下雖然第二條的SQL沒(méi)有匹配,但連第三條的都不匹配了,看起來(lái)還是不對(duì)。
那到底怎么樣才能真正匹配到所有的SQL注釋呢?
首先我們來(lái)總結(jié)一下SQL注釋的一些特點(diǎn):
1. 以--開(kāi)頭
2. 注釋的內(nèi)容,應(yīng)該不會(huì)被包含在一對(duì)''之內(nèi)
3. 注釋?xiě)?yīng)該只會(huì)在最后,前面可以可選的出現(xiàn)一些語(yǔ)句
好了,收集到了這些之后,我們最終的SQL注釋的語(yǔ)法也出來(lái)了:
\-\-([^\'\r\n]{0,}(\'[^\'\r\n]{0,}\'){0,1}[^\'\r\n]{0,}){0,}$
這一下,四條SQL的注釋全匹配到了,正則表達(dá)式太強(qiáng)大了吧。
這個(gè)SQL語(yǔ)句有一個(gè)小小問(wèn)題,就是后面不能有一個(gè)單的單引號(hào)存在,否則就會(huì)匹配有問(wèn)題。(因?yàn)槿藗兊牧?xí)慣對(duì)于這種分隔符默認(rèn)是成雙出現(xiàn)的,這個(gè)小問(wèn)題其實(shí)也是可以忽略的)
相關(guān)文章
SQL?Server數(shù)據(jù)庫(kù)生成與執(zhí)行SQL腳本詳細(xì)教程
為了方便可以把需要連續(xù)執(zhí)行的SQL語(yǔ)句寫(xiě)到一個(gè)文本文件中,并且用.SQL作為擴(kuò)展名,這種文件叫做SQL腳本文件,下面這篇文章主要給大家介紹了關(guān)于SQL?Server數(shù)據(jù)庫(kù)生成與執(zhí)行SQL腳本的相關(guān)資料,需要的朋友可以參考下2023-01-01SQL SERVER數(shù)據(jù)庫(kù)開(kāi)發(fā)之存儲(chǔ)過(guò)程應(yīng)用
SQL SERVER數(shù)據(jù)庫(kù)開(kāi)發(fā)之存儲(chǔ)過(guò)程應(yīng)用...2006-09-09SQL SERVER使用REPLACE將某一列字段中的某個(gè)值替換為其他的值
本節(jié)主要介紹了SQL SERVER使用REPLACE將某一列字段中的某個(gè)值替換為其他的值,需要的朋友可以參考下2014-08-08SQL Server2008數(shù)據(jù)庫(kù)導(dǎo)入導(dǎo)出兼容性處理方案
SQL Server 的高版本數(shù)據(jù)庫(kù)恢復(fù)到低版本則可能會(huì)有兼容性問(wèn)題,下面為大家介紹的是如何解決此類問(wèn)題2014-05-05比較詳細(xì)的完美解決安裝sql2000時(shí)出現(xiàn)以前的某個(gè)程序安裝已在安裝計(jì)算機(jī)上創(chuàng)建掛起的文件操作。
比較詳細(xì)的完美解決安裝sql2000時(shí)出現(xiàn)以前的某個(gè)程序安裝已在安裝計(jì)算機(jī)上創(chuàng)建掛起的文件操作。...2007-10-10sqlserver數(shù)據(jù)庫(kù)導(dǎo)入數(shù)據(jù)操作詳解(圖)
本文主要介紹的是怎么使用Microsoft SQL Server Management Studio導(dǎo)入數(shù)據(jù),大家參考使用吧2014-01-01