2014-10-01 77 views
0

如何將這些查詢從單個字符串拆分爲單個查詢數組?SQL查詢語法拆分器

例如:

"SELECT * FROM table1; SELECT * FROM table2;" 

[ 
"SELECT * FROM table1;", 
"SELECT * FROM table2;" 
] 

好,我不能使用javascript.split( 「;」),因爲可以有分號在查詢作爲值。像

"SELECT * FROM table 1 WHERE col LIKE ';'" 

謝謝。

+2

DECLARE @Text NVARCHAR(MAX) SELECT @Text = '"SELECT * FROM table1; SELECT * FROM table1;","SELECT * FROM table1; SELECT * FROM table2;"' SELECT @Text = REPLACE(@Text,'"','') SELECT @Text = 'SELECT ('''+ REPLACE(@Text,';','''); SELECT(''') + ''')' SELECT @Text = REPLACE(@Text,'; SELECT('''')','') PRINT @Text EXEC (@Text) 

把它分解原生的SQL在JavaScript? – 2014-10-01 07:24:30

+0

如果您將SQL從客戶端發送到您的服務器以執行(甚至通過JavaScript更糟糕)......更改您的地址,混淆名稱並假裝您是攝影師。這是_SQL注入變得簡單。從客戶端你必須收集/發送參數,查詢必須建立在服務器端。 – 2014-10-01 07:28:08

+0

謝謝你們。我實際上是在這裏製作一個sql終端。所以我需要來自html的查詢。 – kenicky 2014-10-01 08:49:33

回答

0

您可以分割使用分割字符串「;選擇」,並在新的字符串的開頭添加SELECT(除了第一個)

+0

**任何**文本可能包含在SQL字符串中。簡單的字符串分割在這裏是不可行的(除非使用更復雜的正則表達式,也考慮字符串分隔符) – 2014-10-01 07:29:30

+0

有沒有這樣的庫? – kenicky 2014-10-01 08:49:51

+0

不能這樣做。它並不總是「選擇」它可能是插入,更新等。 – kenicky 2014-10-01 12:22:27

-1

使用javascript.split(「;」),因爲這是每一個模式行以';'結尾「如果這是不可能在Java中,你可以創建SQL分割字符串函數

+1

'「SELECT * FROM表1 WHERE col LIKE';'」'這個查詢之王將在這種解決方案中返回一個錯誤。 – kenicky 2014-10-01 08:50:44

-1

在這裏,您可以如果你想打印

DECLARE @Text NVARCHAR(MAX) 
SELECT @Text = '"SELECT * FROM table1; SELECT * FROM table1;","SELECT * FROM table1; SELECT * FROM table2;"' 
SELECT @Text = REPLACE(@Text,'"','') 
SELECT @Text = 'PRINT ('''+ REPLACE(@Text,';','''); PRINT(''') + ''')' 
SELECT @Text = REPLACE(REPLACE(@Text,' SELECT','SELECT'),',SELECT','SELECT') 
EXEC (@Text) 
+0

這些叫做什麼? – kenicky 2014-10-01 12:21:31

+0

這是一些字符串格式化動態SQL不知道如果我的答案是直接你想要的,但我認爲你可以用這種方式實現它:) – SubqueryCrunch 2014-10-01 13:00:42

0
var queryStrings = "SELECT * FROM table1; SELECT * FROM table2;" 

// Remove linebreaks; 
var queries = queryStrings.replace(/(\r\n|\n|\r)/gm, ""); 

// Replace ";" delimeter with random string that's unlikely to ever be in a SQL query 
queries = queries.replace(/;/gi, "#&@*^%%)**%123&%"); 

// Split the queries on that random set of characters 
queries = queries.split("#&@*^%%)**%123&%"); 

var cleanQueries = []; 
for (var i = 0; i < queries.length; i++) { 
    // Append a semi-colon after each query 
    if (queries[i]) { 
     var query = queries[i] + ";"; 
     // Trim any white space off the ends; 
     query = query.trim(); 
     cleanQueries.push(query); 
    } 
} 
console.log(cleanQueries) 
// ["SELECT * FROM table1;", "SELECT * FROM table2;"]