c# – 将“SQL”导出到T-SQL
发布时间:2020-12-15 17:25:06 所属栏目:百科 来源:网络整理
导读:我有一个第三方应用程序,将数据库导出为“SQL格式”,这是相当明确的,但它似乎没有完全使用T-SQL.当我导出它时产生这样的东西 INSERT INTO [ExampleDB] ( [IntField],[DateTimeField],[VarcharField],[BinaryField])VALUES(1,'2012/04/02 12:25:00:01','Some
我有一个第三方应用程序,将数据库导出为“SQL格式”,这是相当明确的,但它似乎没有完全使用T-SQL.当我导出它时产生这样的东西
INSERT INTO [ExampleDB] ( [IntField],[DateTimeField],[VarcharField],[BinaryField]) VALUES (1,'2012/04/02 12:25:00:01','Some Text',X'123456'),(2,'0000/00/00 00:00:00:00','B',NULL),--(SNIP,it does this for 1000 records) (999,'Other Text',null); (1000,'D',null); INSERT INTO [ExampleDB] ( [IntField],BinaryField) VALUES (1001,'Trying to break my parser with the next line',null),(1002,' ''X''123',X'deadbeef'),(1003,'Did it break it?',(1004,'What about this? ''0000/00/00 00:00:00:00'' Will that?',--(SNIP) 我遇到的两个障碍是: >’0000/00/00 00:00:00:00’的日期值 我想我可以做一个Regex.Replace,但我想知道是否有更简单的解决方案.到目前为止我要导入的代码是 using (var cmd = new SqlCommand("",conn)) { //snip cmd.CommandTimeout = 0; //Wait forever,bad bad bad,but what else can I do? using (var txtRdr = new StreamReader(file)) { string query = txtRdr.ReadToEnd(); query = query.Replace(" '0000/00/00 00:00:00:00' "," NULL "); query = Regex.Replace(query,"X'([0-9a-fA-F]+)'",@"0x$1"); cmd.CommandText = query; cmd.ExecuteNonQuery(); } } 因为他们列出值的方式,我知道我与SQL2008或更新版本绑定,但是我编写的代码是否有任何问题可以让SQL2008解析它? 当我运行它时,它会陷入执行查询的困境. SQL文件大小为8000 KB(但我可以调整它)有什么办法可以加快速度吗?也许做一些更多的格式化并将其转换为批量插入? 解决方法
每当我不得不在两个数据库之间传输数据时,我发现最快的方式似乎如下:
>使用卸载或等效功能将源数据库批量导出到文本文件.>编写将文本文件格式从源格式转换为目标格式的软件.>使用批量导入或类似功能将文本文件加载到目标数据库中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |