2012-02-15 191 views
1

我正在將數據從SQL服務器導出到SQL文件。問題是一些是字符串包含逗號,所以當我試圖解析SQL文件(基本上使用帶有逗號DELIM字符串分割),我沒有得到我想要的東西列條目。任何人都有解決這個問題或更好的主意?從SQL Server解析插入查詢

基本上我需要的值在查詢中分離:

實施例:

... VALUES(123, '鮑勃喜歡吃漿果,和豆')

如果我分裂使用逗號作爲分隔符我得到:

123 
'bob likes to eat berries 
and beans' 
+0

您可以包含分解SQL文件數據的函數的源代碼嗎?沒有確切的代碼,可能很難提供有效的答案。 – evasilchenko 2012-02-15 21:33:54

+0

簡單的回答是不使用逗號作爲分隔符。但是,真正的答案將取決於您如何構建該聲明。這真的好像一件小事數據的行轉換成插入.. – NotMe 2012-02-15 21:39:42

回答

1

聽起來像你需要使用不同的分隔符導出。你用什麼來出口?如果它是BCP command line utility,你可以使用-t開關切換的分隔符。例如,-t |用於管道分隔。

+0

這就是我一直在尋找的感謝!我還用-r ** \ t **來幫助解決我在上面對Chriseyre的回覆中所描述的問題。 – ryoung 2012-02-16 16:00:30

1

你試過導出爲Tab分離變量?

+0

如果我只是分隔導出CSV或選項卡(保存結果交易)文件,我得到一些funkyness。而不是每條記錄都在它自己的單獨行上,我會將一些較大的列條目分成不同的行。 – ryoung 2012-02-15 21:37:55

+0

@ryoung您是否使用BCP(或SSMS嚮導這基本上是一個BCP GUI)?我總是使用標籤(我相信它是默認情況下使用的標籤,如果你不指定分隔符......但是如果你試圖實際指定一個標籤,它不起作用,我不認爲)我從來沒有這個問題。也許你的數據比我的要長...... – 2012-02-15 21:47:15

+0

爲了創建一個csv或製表符分隔符文件,我只需右鍵單擊查詢結果並選擇「另存爲結果」。 – ryoung 2012-02-15 21:49:04

0

你是否被限制使用逗號作爲分隔符?您可以使用不希望顯示在字符串中的不同字符或一系列字符。

或者,根據數據集的不同,您可以將字符串「編碼」在臨時表中,並將逗號換成特殊字符,以便以後識別。

0

您可以使用正則表達式。

var myMatches = Regex.Matches(lineInFile, "(?:[^',]+)|(?:'[^']+')"); 
foreach(var m in myMatches) 
{ 
    /* write m.ToString() to StringBuilder or file */ 
} 

希望它能幫助。

0

如果使用當前的格式,你可以你喜歡

((\d+), ('.*')) 

一個正則表達式來拆呢。正則表達式不是最好的,但與你一起工作。