.NET Developer, Microsoft MVP

Data Platform 26 SQL Server, Entity Framework and Data Related Technologies


SQL Server Export Data Tier Application via Command Line

We can use SSMS to export data tier application for an SQL Server database. I've been using this method for several years on my local machine. For those who don't know what's a DAC, you can refer to Microsoft document: "A data-tier application (DAC) is a logical database management entity that defines all of the SQL Server objects - like tables, views, and instance objects, including logins - …...

SQL Server DAC

Merge Data for N-N Relationship Tables in T-SQL

最近在整理博客的数据,需要做一个操作就是合并文章的分类。我的博客中文章和分类是多对多的关系。即一篇文章可以属于多个分类,一个分类可以包含多篇文章。这是一个很典型的多对多关系,我用的是一个多对多的表,做联合主键关联这些数据。 就像这样: 我需要做的是把“DotNetBeginner”这个分类的文章移到“CSharpAndDotNet”分类里去。但是因为原先在“DotNetBeginner”里的文章有些也是属于“CSharpAndDotNet”的,所以直接Update关联表的话,会产生重复的联合主键,就会爆。 直观一点看,写个SQL语句查询出原分类(DotNetBeginner)和目标分类(CSharpAndDotNet)中的数据: DECLARE @SourceCatId …...

SQL SQL Server T SQL

Azure SQL数据库Web Tier爆了,如何迁移数据库

今天做了次数据库迁移,目的是开个最新版的Azure SQL Database(V12 Update),然后把博客的数据库迁移到新的server上去。按以往的做法(也就是我曾经写过的《图解:如何将SQL Server数据库迁移到SQL Azure 》),把bacpac文件下载下来,然后import到新的数据里,结果爆了: 爆炸是因为Web Tier和Business Tier在最新版的Azure上面已经被微软撸掉了,SSMS 2014却没有升级,不认识这两个Tier,还在用老的Web Tier。 TITLE: Microsoft SQL Server Management Studio ------------------------------ An exception occurred while executing a Transact-SQL statement or …...

SQL SSMS Azure

EntityFramework 6 SqlQuery传递可空类型参数的写法

有时候我们需要在EF里直接执行参数化的SQL语句,如果有返回,就要把结果映射成C#对象集合。貌似是从EF4.2开始(4.0写法不一样)提供了DbContext.Database.SqlQuery<T>()的API可以直接执行SQL。但是如果碰到可控类型的参数,比如Guid?,就会爆。 看一个例子,定义的SQL语句如下: string sql = @"SELECT p2.Id AS PeriodId, p2.Title AS PeriodTitle, u.UserId AS UserId, u.DisplayName …...

Entity Framework SQL Nullable

EntityFramework中使用.Include()做饥饿加载可能产生的性能问题

这几天在码新版博客程序,因为文章表字段太多,手贱把几个相关列拆分到了1-1的表中。比如Post 1-1 PostPublish,Post 1-1 PostExtension。但是性能突然比以前差了一点。 和这两张相关表直接交互的是这么一段代码: var query = Repository.Select<Post>().Include(p => p.PostExtension).Include(p => p.PostPublish) .Where(p => p.PostPublish.IsPublished && (authorName == null || …...

Entity Framework SQL Performance

图解:如何将SQL Azure数据库备份到本地SQL Server

用了两天SQL Azure后,发现SQL Azure数据库没有办法做传统意义上的“bak”备份,但我们确实很需要能够随时将数据库备份到本地,以更灵活的使用。所以今天就开荒了一下操作方法,并分享给大家。这样一来,我们既可以把SQL Server迁移到SQL Azure,又可以反过来把SQL Azure撸回SQL Server,这是一个比较完整的装逼过程,妹子们一定会赞不绝口。 步骤如下: 1. 启动SSMS2012,在目标SQL Azure数据库上点右键,选择“Export Data-tier Application”。 2. 在Export Settings选项卡里制定本地的备份路径,现在已经是“bacpac”拓展名的了。。。 3. 然后点击Next,确认后就向导就开始撸了。 4. 撸完以后会显示 …...

SQL Server SQL Azure Cloud Azure

图解:如何将SQL Server数据库迁移到SQL Azure

最近为了进一步装逼,决定将本博客的数据库从SQL Server 2008 R2迁移到Windows Azure上,即SQL Azure,云数据库。今天花了半天时间成功完成了迁移,把经验拿出来给大家分享。 注意:本文的方法只在SQL Server 2008 R2和SQL Server 2012数据库上试过,其他版本生死未卜。 首先,不管你现在的数据库是MSSQL2008R2的还是MSSQL2012的,你都需要安装SQL Server 2012版的SSMS。这是最方便的迁移方法。如果不想用SSMS,可以试试codeplex上的这个工具:http://sqlazuremw.codeplex.com/ 1. 启动SSMS后,在要被迁移的本地数据库上点右键,选择Tasks - Deploy Database to SQL Azure... 2. 在弹出的向导中,点击Connect,连接到 …...

SQL Azure Cloud Azure

SQL游标的使用

SQL里要做循环比较麻烦,有时候需要用游标(CURSOR)。我是SQL大菜鸟,昨天刚开荒成功了一个游标。发出来备用。 基本语法形式是这样的: DECLARE @临时变量 UNIQUEIDENTIFIER DECLARE 游标名称 CURSOR FOR -- SELECT的结果 OPEN 游标名称 FETCH NEXT FROM 游标名称 INTO @临时变量 WHILE @@FETCH_STATUS = 0 BEGIN -- 对每一条记录的操作 FETCH NEXT FROM 游标名称 INTO @临时变量 END CLOSE 游标名称 DEALLOCATE 游标名称 举个例子,遍历我博客的分类表,输出每一项的Route名称: DECLARE @tempId UNIQUEIDENTIFIER DECLARE @tempName …...

SQL Cursor

Performance tips for Entity Framework

自从我用了EF,每次都很关心是否有潜在的性能问题。所以每次我写LINQ查询,都会使用SQL Profiler看一下实际生成的SQL语句,以便发现潜在的性能问题。也强烈建议大家这么去做,以免日后软件大了出了问题很难查。 一、只选择某列或某些列 有些时候,在C#里写LINQ虽然看着舒服,但性能不一定好,所以有必要做一些调整。比如这种情况: 我需要知道一篇文章的点击数,仅此而已,我可能会写: context.Post.FirstOrDefault(p => p.Id == postId).Hits; 或者: context.Post.Find(postId).Hits; 我期待着他们只去数据库里筛选Hits这一列的数据,然而,通过SQL Profiler会发现,这两条语句居然把全部列都给select出来了,访问Hits的操作实际是在内存中进行的。 虽然小表看不出性能问题,但 …...

LINQ ADO.NET Performance

如何手工将Entity Framework 4.0升级到5.0

最近在码下一版的博客,其中有个更新就是把Entity Framework升级到5.0。当初建博客的时候是用VS2010自带的EF4的。从4.0升级的过程必须手动完成,通过NuGet的升级,只能自动撸4.1以上的版本。 昨天爆了很久,终于把网站弄得可以运行了。下面分享经验。 第一步:从NuGet安装Entity Framework 5.0 首先,对现有的EF4.0项目,什么都不要改,也不要删。直接从NuGet安装EF5。如果你是.NET4的项目,那实际上安装的是4.4版的DLL,所以EF5的枚举类型是不可以用的。如果你已经升级了.NET4.5,那就是完完全全的EF5。 NuGet会自动给你添加引用以及配置相关的config文件。 第二步:更新EDMX 打开现有的EDMX文件,在空白处点击右键,选择“Add Code Generation Item” …...

ADO.NET