2012-02-15 100 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+), ('.*')) 

一个正则表达式来拆呢。正则表达式不是最好的,但与你一起工作。