2015-02-04 5 views
0

У меня есть тысяча запросов, которые нужно выполнить из текстового файла.Регулярное выражение для имени базы данных

См сильфонные вид запроса у меня есть:

SELECT * 
    FROM T1 A 
    INNER JOIN DB2.dbo.CI_T1 B ON A.id= B.id 
    LEFT OUTER JOIN T3 C ON B.id = C.id 
    WHERE ... 

Некоторые из таблиц также названы (database.owner.table_name), и некоторые другие нет (table_name).

Как я могу использовать регулярное выражение для обновления каждого запроса для замены неквалифицированных экземпляров table_name на database.owner.table_name?

я пишу скрипку, чтобы проверить это: http://www.phpliveregex.com/p/9SH и http://www.phpliveregex.com/p/9SF

+1

Что такое ваш вопрос? –

+0

На каком языке вы работаете, чтобы сделать замену? У всех таблиц есть псевдонимы? Если нет, делать эту замену в предложениях 'ON' было бы очень сложно. –

+0

@MichaelBerkowski Я работаю с PHP – Fractaliste

ответ

0

В конце концов я использую следующие регулярные выражения с preg_replace функции:

$regex = '#(FROM)\s+((?!\.)[[:alnum:]_]+)\s+(\w*)\s*(INNER|LEFT|WHERE|\))#i'; 
$regex2 = '#(JOIN)\s+((?!\.)[[:alnum:]_]+)\s+(\w*)\s*(ON)#i'; 
0

Если меня были, я бы не пытаться использовать регулярные выражения. Хотя для простого SELECT, как вы указали (хотя вы, кажется, испытываете некоторые трудности), тривиально, но не скоро вы найдете how difficult, чтобы проанализировать язык программирования с помощью простого регулярного выражения.

Я бы начал с SQL parser.

Смежные вопросы