如果您想了解[MSSQL]采用pivot函数实现动态行转列的知识,那么本篇文章将是您的不二之选。同时我们将深入剖析asp.net-mvc-3–使用存储过程(MSSQL)时Dapper的缓存解决方案、B
如果您想了解[MSSQL]采用pivot函数实现动态行转列的知识,那么本篇文章将是您的不二之选。同时我们将深入剖析asp.net-mvc-3 – 使用存储过程(MSSQL)时Dapper的缓存解决方案、BI学习走过的路---MSSQL 2008 安装过程、C# 数据类型映射 (SQLite,MySQL,MSSQL,Oracle)、Connect to MSSQL Database using Flask-SQLAlchemy的各个方面,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- [MSSQL]采用pivot函数实现动态行转列
- asp.net-mvc-3 – 使用存储过程(MSSQL)时Dapper的缓存解决方案
- BI学习走过的路---MSSQL 2008 安装过程
- C# 数据类型映射 (SQLite,MySQL,MSSQL,Oracle)
- Connect to MSSQL Database using Flask-SQLAlchemy
[MSSQL]采用pivot函数实现动态行转列
环境要求:2005+ 在日常需求中经常会有行转列的事情需求处理,如果不是动态的行,那么我们可以采取case when 罗列处理。 在sql 2005以前处理动态行或列的时候,通常采用拼接字符串的方法处理,在2005以后新增了pivot函数之后,我可以利用这样函数来处理。 1.
环境要求:2005+
在日常需求中经常会有行转列的事情需求处理,如果不是动态的行,那么我们可以采取case when 罗列处理。
在sql 2005以前处理动态行或列的时候,通常采用拼接字符串的方法处理,在2005以后新增了pivot函数之后,我可以利用这样函数来处理。
1.动态SQL注入式判断函数
--既然是用到了动态SQL,就有一个老话题:SQL注入。建一个注入性字符的判断函数。 CREATE FUNCTION [dbo].[fn_CheckSQLInjection] ( @Col nvarchar(4000) ) RETURNS BIT --如果存在可能的注入字符返回true,反之返回false AS BEGIN DECLARE @result bit; IF UPPER(@Col) LIKE UPPER(N'%0x%') OR UPPER(@Col) LIKE UPPER(N'%;%') OR UPPER(@Col) LIKE UPPER(N'%''%') OR UPPER(@Col) LIKE UPPER(N'%--%') OR UPPER(@Col) LIKE UPPER(N'%/*%*/%') OR UPPER(@Col) LIKE UPPER(N'%EXEC%') OR UPPER(@Col) LIKE UPPER(N'%xp_%') OR UPPER(@Col) LIKE UPPER(N'%sp_%') OR UPPER(@Col) LIKE UPPER(N'%SELECT%') OR UPPER(@Col) LIKE UPPER(N'%INSERT%') OR UPPER(@Col) LIKE UPPER(N'%UPDATE%') OR UPPER(@Col) LIKE UPPER(N'%DELETE%') OR UPPER(@Col) LIKE UPPER(N'%TRUNCATE%') OR UPPER(@Col) LIKE UPPER(N'%CREATE%') OR UPPER(@Col) LIKE UPPER(N'%ALTER%') OR UPPER(@Col) LIKE UPPER(N'%DROP%') SET @result=1 ELSE SET @result=0 return @result END GO
2.需求:
--通过日期查询几个表联合,按照检验项目分类,按日期横向展示
select a.检验项目 , CONVERT(char(10),a.日期,120)日期,Convert(decimal(18,2),cast((SUM(a.测试数量)-SUM(a.不良数量)) as decimal(18,2))/sum(测试数量))*100 as 良率 --into #tempcob from (select 日期,检验项目, 测试数量, 不良数量 from 制程COB成测 union all select 日期,检验项目, 测试数量, 不良数量 from 制程COB外观 union all select 日期,检验项目,测试数量, 不良数量 from 制程COB绑测 union all select 送检日期,'FQC_COB_检验',检验数量,不合格数量 from 制程FQC_COB_检验 ) as a where CONVERT(char(10),日期,120)>='2014-10-01' and CONVERT(char(10),日期,120)<= '2014-10-30' group by a.检验项目,a.日期
3.解决方案:
--抓取数据写入临时表#tempcob select a.检验项目 , CONVERT(char(10),a.日期,120)日期,Convert(decimal(18,2),cast((SUM(a.测试数量)-SUM(a.不良数量)) as decimal(18,2))/sum(测试数量))*100 as 良率 into #tempcob from (select 日期,检验项目, 测试数量, 不良数量 from 制程COB成测 union all select 日期,检验项目, 测试数量, 不良数量 from 制程COB外观 union all select 日期,检验项目,测试数量, 不良数量 from 制程COB绑测 union all select 送检日期,'FQC_COB_检验',检验数量,不合格数量 from 制程FQC_COB_检验 ) as a where CONVERT(char(10),日期,120)>='2014-10-01' and CONVERT(char(10),日期,120)<= '2014-10-30' group by a.检验项目,a.日期 --查看临时表数据,取分布日期(不重复) --select 日期 from #tempcob --select distinct 日期 from #tempcob DECLARE @SQL NVARCHAR(4000)=N''; --这里使用了xml处理来处理类组字符串 SET @SQL=STUFF((SELECT N','+QUOTENAME(b.日期) FROM (select distinct 日期 from #tempcob) as b FOR XML PATH('')),1,1,N''); --加入了xml处理和SQL注入预防判断 IF dbo.fn_CheckSQLInjection(@SQL)=0 SET @SQL='select * from #tempcob pivot (max(良率) for 日期 in ('+@SQL+')) as tt' EXEC(@SQL); drop table #tempcob
4.结果:
asp.net-mvc-3 – 使用存储过程(MSSQL)时Dapper的缓存解决方案
我可以使用现成的数据缓冲解决方案吗? (我需要在MVC上使用它).
数据库中的数据本质上是静态的和动态的.我使用存储库模型来访问数据.
解决方法
如果您使用分布式缓存(可能通过app-fabric,redis或memcached),那么您需要将数据序列化.在那种情况下,我强烈建议使用正式的POCO类型进行绑定,而不是动态API.例如,我们在内部使用dapper来填充用protobuf-net标记进行注释以进行序列化的POCO,并通过BookSleeve存储到redis.这听起来比实际更复杂.
BI学习走过的路---MSSQL 2008 安装过程
学习BI,开始的路程十分坎坷啊。
我学习的是针对MS sql Server的BI开发
刚熟悉了各种术语之后,开始安装数据库、sql服务、SSAS、SSIS
结果悲催的是,从官网下载了Express版本的2008数据库,怎么找都找不到SSAS、SSIS等服务。
为此足足失眠了3天左右的时间……
不过,功夫不负有心人,终于找到了一个可以十分简单的下载微软软件的网站,再次分享给各位朋友。
http://msdn.itellyou.cn/
同时,在此处分享一个sql Server 2008的安装图解
http://www.cnblogs.com/downmoon/archive/2010/05/18/1738479.html
国内关于BI的学习,在网络上资料比较有限,而且杂乱,本人在学习过程中会将一些学习心得在此与大家分享下,希望能给大家带来帮助。
C# 数据类型映射 (SQLite,MySQL,MSSQL,Oracle)
MSSQL
SQLITE
一、C# vs SQLite:
二、 C# vs MySQL:
三、 C# vs MSSQL:
四、C# vs Oracle:
附、类型转换:


using System;
using System.Collections.Generic;
using System.Text; namespace vJine.Core.ORM { public class TypeConverter { public class sbyte_ /*: IConverter<sbyte>*/ { public static sbyte CONV_Q(object V) { return (sbyte)V; } } public class ushort_ /*: IConverter<ushort>*/ { public static ushort CONV_Q(object V) { return (ushort)V; } } public class uint_ /*: IConverter<uint>*/ { public static uint CONV_Q(object V) { return (uint)V; } } public class ulong_ /*: IConverter<ulong>*/ { public static ulong CONV_Q(object V) { return (ulong)V; } } public class bool_string /*: IConverter<bool>*/ { public static object CONV_I(object V) { if ((bool)V == true) { return "1"; } else { return "0"; } } public static bool CONV_Q(object V) { if ((string)V == "1") { return true; } else { return false; } } } public class sbyte_short /*: IConverter<sbyte>*/ { public static object CONV_I(object V) { return Convert.ToInt16(V); } public static sbyte CONV_Q(object V) { return Convert.ToSByte(V); } } public class byte_short /*: IConverter<byte>*/ { public static object CONV_I(object V) { return Convert.ToInt16(V); } public static byte CONV_Q(object V) { return Convert.ToByte(V); } } public class short_int /*: IConverter<short>*/ { public static object CONV_I(object V) { return Convert.ToInt32(V); } public static short CONV_Q(object V) { return Convert.ToInt16(V); } } public class ushort_int /*: IConverter<ushort>*/ { public static object CONV_I(object V, string Name) { return Convert.ToInt32(V); } public static ushort CONV_Q(object V, string Name) { return Convert.ToUInt16(V); } } public class int_long /*: IConverter<int>*/ { public static object CONV_I(object V) { return Convert.ToInt64(V); } public static int CONV_Q(object V) { return Convert.ToInt32(V); } } public class uint_long /*: IConverter<uint>*/ { public static object CONV_I(object V) { return Convert.ToInt64(V); } public static uint CONV_Q(object V) { return Convert.ToUInt32(V); } } public class long_decimal /*: IConverter<long>*/