1、数据库 行转列 列转行的方式
在做数据统计的时候,行转列,列转行是经常碰到的问题。case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比较快速实现行转列,列转行,而且可扩展性强。
https://www.cnblogs.com/linJie1930906722/p/6036714.html
2、EF导航属性
https://www.cnblogs.com/Dr-Hao/p/5365325.html
3、删除视图数据 delete from house_view t where t.AUTOID=1064 对 原表ba_house 会有影响吗
如果你那个视图,是 单表的, 没写 触发器的。
那么 如果 删除视图中的数据 成功了,那么 表中的数据 就被删除了。
如果那个视图, 写了个 INSTEAD OF 触发器. 但是里面没有任何删除的动作。
那么 可能你 DELETE FROM 视图, 最后表的数据,一点也没变化, 也是可以的。
首先,要明白视图的原理。
视图的数据都产生于表,视图本身是没有数据的,而表才是真正的数据来源。
还有多级的视图,就是从视图还可以继续创建视图。
所以,视图的数据来源是表或视图。但是最终的数据源一定是表。
什么样的视图数据是可以使用DELETE的?只有从单表引过来的视图是可以的,这样的视图操作实际就相当于操作表,但是DROP VIEW不会对数据有任何影响。其他形势的视图,都是不可能删除数据的。但是DROP VIEW同样可以。
视图只是根据关联关系从表中抓取数据。实际并没有像表一样有专门的存储这些数据。只是从表里引过来而已。只要你时刻记住,视图实际上并没有实际的存储数据,而是借用表的数据,这就够了。无论你创建或者删除视图,都不会影响数据本身。否则你想想,你创建了一个视图的时候,没想过为什么一下子就有了那么多数据了呢?也不是你插入的,因为就是从表引过来的而已。
删除视图的语句是DROP VIEW 视图名字
所以删除视图,不会对数据有任何影响。因为数据都在表中。想要恢复视图,重新创建,你的几千万条数据就又会出现了。视图的效果和SELECT查询一样,只是能把这个查询固定了,以便你直接拿来用。
4、 IQueryable
1)、我们看到其中有个接口属性 IQueryProvider ,这个接口的作用大着呢,主要作用是在执行查询操作符的时候重新创建 IQueryable<T> 并且最后遍历的时候执行sql远程取值。我们还看见了 Expression 属性。
2)、 IQueryable<T> 最主要的作用就是用来存储 Expression(表达式树)