如果您对MSSQL触发器的运用感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于MSSQL触发器的运用的详细内容,我们还将为您解答mysql触发器的相关问题,并且为您提供关于a
如果您对MSSQL 触发器的运用感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于MSSQL 触发器的运用的详细内容,我们还将为您解答my sql 触发器的相关问题,并且为您提供关于asp.net-mvc-3 – 使用存储过程(MSSQL)时Dapper的缓存解决方案、BI学习走过的路---MSSQL 2008 安装过程、C# 数据类型映射 (SQLite,MySQL,MSSQL,Oracle)、Connect to MSSQL Database using Flask-SQLAlchemy的有价值信息。
本文目录一览:- MSSQL 触发器的运用(my sql 触发器)
- asp.net-mvc-3 – 使用存储过程(MSSQL)时Dapper的缓存解决方案
- BI学习走过的路---MSSQL 2008 安装过程
- C# 数据类型映射 (SQLite,MySQL,MSSQL,Oracle)
- Connect to MSSQL Database using Flask-SQLAlchemy
MSSQL 触发器的运用(my sql 触发器)
MSSQL 触发器的运用
1、触发器。
定义: 何为触发器?在里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
常见的触发器有三种:分别应用于 Insert , Update , Delete 事件。(SQL Server 2000 定义了新的触发器,这里不提)
我为什么要使用触发器?比如,这么两个表:
Create Table Student ( -- 学生表
StudentID int primary key, -- 学号
....
)
Create Table BorrowRecord ( -- 学生借书记录表
BorrowRecord int identity (1,1), -- 流水号
StudentID int , -- 学号
BorrowDate datetime, -- 借出时间
ReturnDAte Datetime, -- 归还时间
...
)
用到的功能有:
1. 如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关 (也就是同时更改借书记录表的学号);
2. 如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。
等等。
这时候可以用到触发器。对于 1,创建一个 Update 触发器:
Create Trigger truStudent
On Student
for Update
As
if Update(StudentID)
begin
Update BorrowRecord
Set StudentID=i.StudentID
From BorrowRecord br , Deleted d ,Inserted i
Where br.StudentID=d.StudentID
end
理解触发器里面的两个临时的表:Deleted , Inserted 。注意 Deleted 与 Inserted 分别表示触发事件的表 “旧的一条记录” 和 “新的一条记录”。
一个 Update 的过程可以看作为:生成新的记录到 Inserted 表,复制旧的记录到 Deleted 表,然后删除 Student 记录并写入新纪录。
对于 2,创建一个 Delete 触发器
Create trigger trdStudent
On Student
for Delete
As
Delete BorrowRecord
From BorrowRecord br , Delted d
Where br.StudentID=d.StudentID
从这两个例子我们可以看到了触发器的关键:A.2 个临时的表;B. 触发机制。
这里我们只讲解最简单的触发器。复杂的容后说明。
事实上,我不鼓励使用触发器。触发器的初始设计思想,已经被 “级联” 所替代.
字段类型
描述
bit
0 或 1 的整型数字
int
从 - 2^31 (-2,147,483,648) 到 2^31 (2,147,483,647) 的整型数字
smallint
从 - 2^15 (-32,768) 到 2^15 (32,767) 的整型数字
tinyint
从 0 到 255 的整型数字
decimal
从 - 10^38 到 10^38-1 的定精度与有效位数的数字
numeric
decimal 的同义词
money
从 - 2^63 (-922,337,203,685,477.5808) 到 2^63-1 (922,337,203,685,477.5807) 的货币数据,最小货币单位千分之十
smallmoney
从 - 214,748.3648 到 214,748.3647 的货币数据,最小货币单位千分之十
float
从 - 1.79E+308 到 1.79E+308 可变精度的数字
real
从 - 3.04E+38 到 3.04E+38 可变精度的数字
datetime
从 1753 年 1 月 1 日到 9999 年 12 日 31 的日期和时间数据,最小时间单位为百分之三秒或 3.33 毫秒
smalldatetime
从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间数据,最小时间单位为分钟
timestamp
时间戳,一个数据库宽度的唯一数字
uniqueidentifier
全球唯一标识符 GUID
char
定长非 Unicode 的字符型数据,最大长度为 8000
varchar
变长非 Unicode 的字符型数据,最大长度为 8000
text
变长非 Unicode 的字符型数据,最大长度为 2^31-1 (2G)
nchar
定长 Unicode 的字符型数据,最大长度为 8000
nvarchar
变长 Unicode 的字符型数据,最大长度为 8000
ntext
变长 Unicode 的字符型数据,最大长度为 2^31-1 (2G)
binary
定长二进制数据,最大长度为 8000
varbinary
变长二进制数据,最大长度为 8000
image
变长二进制数据,最大长度为 2^31-1 (2G)
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>*/