分类 SQL Server 下的文章

C#动态修改connectionString

使用Entity Framework方式连接数据库时,处于安全性考虑,会把App.config里面的connectionString放到配置中心或者加密。加密是为了不暴露数据库连接信息,而放到配置中心好处则更加明显,如果出现集群部署,只需要在配置中心设置一次,便能在所有服务器中生效,大大节省了维护时间。有时候,当数据库出现故障,需要手工切换数据库时,就需要在不重启程序的情况下,更改连接字符串。本篇就来谈谈C#如何在程序中动态的修改connectionString.

- 阅读剩余部分 -

C# SqlBulkCopy实现SQLSRVER批量插入

使用Entity Framework连接SQLSERVER数据库,在实现数据导入功能时,一开始使用AddRange()然后Save()操作,发现数据量一大,效率下降的很厉害。

测试发现,一个只有几列的表,插入上万条数据时,可能需要20s左右,甚至出现卡死。以前只知道EF效率慢,不如第三方的ORM框架,如Drapper,不用不知道,一用吓一跳。

于是,自然地要改用批量插入,随手一查你能够发现EF也有扩展能够较好的解决问题,但是收费的,因此只好尝试微软推荐的SQLSERVER批量插入的方式:SQLBulkCopy

- 阅读剩余部分 -

SQLSERVER批量插入Bulk Insert介绍

Bulk Insert作用是将指定文件中的数据导入到特定的表或视图中。

在特定场合下,该语句发挥中很大的作用:

(1)将一个数据库表中的记录导入到另一个数据库的表中。虽然可以用SQL的导入导出,但Bulk Insert可以只针对筛选出来的结果集,更灵活。笔者有时为了调试客户问题,就常用于从客户环境中查询出相关表数据后导入到本地来调试;

(2)导入测试数据。很多情况下,都会对功能进行性能测试,需要在表中创建大量的数据,这时Bulk Insert必然是首选;

- 阅读剩余部分 -

SQLServer使用for xml path()来拼接行

在写SQL语句时,有时候需要对表中的行进行拼接,这时候可以使用STUFF()和for xml path()语句:

如有表如下:

id  |   name
----------
1   |   aaa
1   |   bbb
1   |   ccc

你想得到的结果如下:

id  |   result
--------------
1   |   aaa,bbb,ccc

有的在业务系统中通过多次查询拼接也可以得到如上结果,但是多次查询数据库会更麻烦。这里可以使用TSQL的STUFF函数和for xml path()方法。

- 阅读剩余部分 -

SQL与NoSQL数据库的区别介绍

SQL与NoSQL数据库,分别指关系数据库和非关系数据库。之间的区别指的是数据库的构建方式、存储的数据格式及数据存储方式的不同。实际上SQL数据库指的是仅能使用结构化查询语言(SQL)进行读写的,而NoSQL数据库是不使用SQL作为查询语言,也有的地方将NoSQL表达为(Not only sql).

以一条博文为例,下图就说明了SQL与NoSQL的区别:

微信截图_20180308195319.png

  • SQL数据库: 博文、标签和评论都是分表存储的,每一条的博文的标签机评论是根据博文的ID进行关联,因此这些表的设计都是很严格的,插入里面的数据必须符合条件才行;
  • NoSQL数据库:一篇博文对应的标签及评论不是以表结构进行存储,代之的可能是以文件方式进行存储,这样一个文件就包含了该篇博文所有的标签、评论及其他可能扩展的属性信息;

- 阅读剩余部分 -