博客园 - 马啸西风
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=134446
2013-04-17T09:11:22Z
马啸西风
https://www.cnblogs.com/mayanlong/
feed.cnblogs.com
https://www.cnblogs.com/mayanlong/archive/2012/12/25/2832318.html
SQL Server 2008之XML数据存储 - 马啸西风
SQL Server许多方面都用到了XML:SQL Server可以存储XML数据、XML架构、根据XML架构验证XML数据DDL触发器返回事件详细数据是XML数据结构(EVENTDATA)的,导致触发器被触发Extended events返回的trace数据是XML格式的Logon触发器返回的详细数据和DDL触发器是相似的,都是EVENTDATA结构的Service Broker中传输的数据都是基于XML的Event notifications通过Service Broker队列发送DDL事件详细信息。这些通知都是基于XML的XML是纯文本、基于Unicode的元数据语言(描述语言的语言),
2012-12-25T06:05:00Z
2012-12-25T06:05:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】SQL Server许多方面都用到了XML:SQL Server可以存储XML数据、XML架构、根据XML架构验证XML数据DDL触发器返回事件详细数据是XML数据结构(EVENTDATA)的,导致触发器被触发Extended events返回的trace数据是XML格式的Logon触发器返回的详细数据和DDL触发器是相似的,都是EVENTDATA结构的Service Broker中传输的数据都是基于XML的Event notifications通过Service Broker队列发送DDL事件详细信息。这些通知都是基于XML的XML是纯文本、基于Unicode的元数据语言(描述语言的语言), <a href="https://www.cnblogs.com/mayanlong/archive/2012/12/25/2832318.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/12/25/2832315.html
SQL Server 2008之托管代码 - 马啸西风
许多SQL Server的组件都可以扩展,过去扩展数据库引擎都是通过extended stored procedures,其问题是编程复杂,基于C++的,直接在SQL Server的处理空间上执行,这个位置不是一个安全执行位置,任何错误都可能引起数据库引擎不稳定;即使最不安全的托管代码也比非托管代码安全托管代码的优点:类型安全性丰富的类库高级的异常处理有些情形性能更高在托管代码中可以创建的数据库对象:用户自定义函数、存储过程、触发器(DML、DDL),托管代码还允许创建其他类型对象:自定义数据类型、自定义的聚合函数T-SQL是在数据库中操作数据的主要方法,它被设计用来直接的数据访问,提供高性能
2012-12-25T06:04:00Z
2012-12-25T06:04:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】许多SQL Server的组件都可以扩展,过去扩展数据库引擎都是通过extended stored procedures,其问题是编程复杂,基于C++的,直接在SQL Server的处理空间上执行,这个位置不是一个安全执行位置,任何错误都可能引起数据库引擎不稳定;即使最不安全的托管代码也比非托管代码安全托管代码的优点:类型安全性丰富的类库高级的异常处理有些情形性能更高在托管代码中可以创建的数据库对象:用户自定义函数、存储过程、触发器(DML、DDL),托管代码还允许创建其他类型对象:自定义数据类型、自定义的聚合函数T-SQL是在数据库中操作数据的主要方法,它被设计用来直接的数据访问,提供高性能 <a href="https://www.cnblogs.com/mayanlong/archive/2012/12/25/2832315.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/12/25/2832307.html
SQL Server 2008之触发器 - 马啸西风
触发器是特殊的存储过程,在事件发生时执行;DML触发器在INSERT、UPDATE、DELETE时触发,DDL触发器在像CREATE、ALTER、DROP时触发,Logon触发器在建立会话时触发触发器和触发它的语句被认为是一个操作,如果回滚的话,这两个一起回滚,如果这个语句是外层事务的一部分的话,外层事务也会被回滚;触发器也可以级联修改相关表,但是这样的操作,还是使用级联引用完整性约束更高效一些相对于CHECK约束来说,触发器可以完成更加复杂的约束检查,在触发器中还可以引用其他表;触发器还可以定制错误消息,使得传递给客户的消息更有意义;可以为同一类型的操作定义多个触发器AFTER Trigge
2012-12-25T06:03:00Z
2012-12-25T06:03:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】触发器是特殊的存储过程,在事件发生时执行;DML触发器在INSERT、UPDATE、DELETE时触发,DDL触发器在像CREATE、ALTER、DROP时触发,Logon触发器在建立会话时触发触发器和触发它的语句被认为是一个操作,如果回滚的话,这两个一起回滚,如果这个语句是外层事务的一部分的话,外层事务也会被回滚;触发器也可以级联修改相关表,但是这样的操作,还是使用级联引用完整性约束更高效一些相对于CHECK约束来说,触发器可以完成更加复杂的约束检查,在触发器中还可以引用其他表;触发器还可以定制错误消息,使得传递给客户的消息更有意义;可以为同一类型的操作定义多个触发器AFTER Trigge <a href="https://www.cnblogs.com/mayanlong/archive/2012/12/25/2832307.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/12/25/2832300.html
SQL Server 2008之约束 - 马啸西风
使用CHECK约束时,当返回FALSE时,插入值将被拒绝,但是如果为NULL的话不会被拒绝,需要非常小心返回NULL值的情况在数据库术语中,候选键用来描述列或者列的组合,这些列用来唯一标示一行数据,所有这些列都不允许为NULL;主键就是一个候选键,是用来唯一确定一行的主要方式;最好是为主键约束定义一个名称,而不是让SQL Server为主键定义名称;SQL Server内部会为主键约束创建索引UNIQUE约束要求只有一行可以为NULL,SQL Server内部会为UNIQUE约束创建索引,和其他约束一样,最好为UNIQUE约束定义一个名称,而不是让SQL Server去定义名称FOREIGN
2012-12-25T06:01:00Z
2012-12-25T06:01:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】使用CHECK约束时,当返回FALSE时,插入值将被拒绝,但是如果为NULL的话不会被拒绝,需要非常小心返回NULL值的情况在数据库术语中,候选键用来描述列或者列的组合,这些列用来唯一标示一行数据,所有这些列都不允许为NULL;主键就是一个候选键,是用来唯一确定一行的主要方式;最好是为主键约束定义一个名称,而不是让SQL Server为主键定义名称;SQL Server内部会为主键约束创建索引UNIQUE约束要求只有一行可以为NULL,SQL Server内部会为UNIQUE约束创建索引,和其他约束一样,最好为UNIQUE约束定义一个名称,而不是让SQL Server去定义名称FOREIGN <a href="https://www.cnblogs.com/mayanlong/archive/2012/12/25/2832300.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/12/25/2832291.html
SQL Server 2008之用户自定义函数 - 马啸西风
标量函数,当使用T-SQL实现时不能返回rowversion、cursor、table,当使用托管代码实现时,不能返回rowversion、cursor、table、text、ntext、image创建标量函数时,CREATE FUNCTION必须是批处理中唯一语句;和存储过程不同,使用函数时,必须使用BEGIN...END抱住函数体,存储过程中BEGIN...END是可选的创建用户自定以的标量函数的Guidelines:函数使用两部分命名法,函数中引用的数据库对象也使用两部分命名法在函数中,错误将导致整个函数停止执行,而存储过程或者触发器则是只取消产生错误的语句执行,然后继续执行接下来的语句
2012-12-25T05:59:00Z
2012-12-25T05:59:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】标量函数,当使用T-SQL实现时不能返回rowversion、cursor、table,当使用托管代码实现时,不能返回rowversion、cursor、table、text、ntext、image创建标量函数时,CREATE FUNCTION必须是批处理中唯一语句;和存储过程不同,使用函数时,必须使用BEGIN...END抱住函数体,存储过程中BEGIN...END是可选的创建用户自定以的标量函数的Guidelines:函数使用两部分命名法,函数中引用的数据库对象也使用两部分命名法在函数中,错误将导致整个函数停止执行,而存储过程或者触发器则是只取消产生错误的语句执行,然后继续执行接下来的语句 <a href="https://www.cnblogs.com/mayanlong/archive/2012/12/25/2832291.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/12/25/2832284.html
SQL Server 2008之错误处理 - 马啸西风
错误可能发生执行的各个阶段,包括语法检查阶段、对象名称识别阶段、语句执行阶段;错误即可以在数据库引擎中处理,也可以在应用程序中处理错误类型,根据错误发生时机区分:Syntax Errors,语法错误Object Resolution Errors,对象识别错误Statement Terminating Errors,语句终止错误,发生错误的下一条语句继续执行Batch、Connection、Server Terminating Errors,通常都是非常严重的错误,比如硬件错误,非常少见错误本身也是一个对象,具有如下属性:Error number:唯一的错误编码Error Message:错误
2012-12-25T05:57:00Z
2012-12-25T05:57:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】错误可能发生执行的各个阶段,包括语法检查阶段、对象名称识别阶段、语句执行阶段;错误即可以在数据库引擎中处理,也可以在应用程序中处理错误类型,根据错误发生时机区分:Syntax Errors,语法错误Object Resolution Errors,对象识别错误Statement Terminating Errors,语句终止错误,发生错误的下一条语句继续执行Batch、Connection、Server Terminating Errors,通常都是非常严重的错误,比如硬件错误,非常少见错误本身也是一个对象,具有如下属性:Error number:唯一的错误编码Error Message:错误 <a href="https://www.cnblogs.com/mayanlong/archive/2012/12/25/2832284.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/12/25/2831729.html
SQL Server 2008之创建高并发应用程序 - 马啸西风
每个事务都是记录在事务日志中,数据修改首先写到事务日志中,然后在写到数据库中,如果事务的任何部分失败,修改全部回滚,数据库保持在原来的状态,事务使用锁阻止其他用户读取或者修改还没有提交的数据SQL Server默认是自动提交,即每个T-SQL语句执行成功就提交,执行失败就回滚,除非显式开启事务;默认是只回滚产生错误的语句,如果XACT_ABORT设置为ON的话,则出现错误时回滚整个批处理使用WITH MARK选项可以为事务指定一个描述,描述被标记在事务日志中,这个事务日志标记用于restore数据库,表明想要restore的点;SAVE TRANSACTION语句创建一个save point,
2012-12-24T16:35:00Z
2012-12-24T16:35:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】每个事务都是记录在事务日志中,数据修改首先写到事务日志中,然后在写到数据库中,如果事务的任何部分失败,修改全部回滚,数据库保持在原来的状态,事务使用锁阻止其他用户读取或者修改还没有提交的数据SQL Server默认是自动提交,即每个T-SQL语句执行成功就提交,执行失败就回滚,除非显式开启事务;默认是只回滚产生错误的语句,如果XACT_ABORT设置为ON的话,则出现错误时回滚整个批处理使用WITH MARK选项可以为事务指定一个描述,描述被标记在事务日志中,这个事务日志标记用于restore数据库,表明想要restore的点;SAVE TRANSACTION语句创建一个save point, <a href="https://www.cnblogs.com/mayanlong/archive/2012/12/25/2831729.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/12/25/2831726.html
SQL Server 2008之合并数据和表传递 - 马啸西风
Merge语句用来在没有数据时插入数据,在有数据时更新数据,用来更新批量数据;Merge操作是原子性的,要么全部成功,要么全部失败;在Merge中指定目标表,在USING中指定源表,源表除了实际表以外,还可以是视图、子查询或者派生表(带别名)、CTE、值语句(带别名)WHEN MATCH语句用来定义在源表中的行匹配目标表中的行时的行为,包括UPDATE、DELETE、INSERT,只可以更新目标表,如果更新其他表的话会返回错误;最多可以包含两个WHEN MATCH语句,第一个语句必须包含AND条件,当AND条件满足时,执行第一个WHEN MATCH,当AND条件不满足时,执行第二个WHEN M
2012-12-24T16:32:00Z
2012-12-24T16:32:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】Merge语句用来在没有数据时插入数据,在有数据时更新数据,用来更新批量数据;Merge操作是原子性的,要么全部成功,要么全部失败;在Merge中指定目标表,在USING中指定源表,源表除了实际表以外,还可以是视图、子查询或者派生表(带别名)、CTE、值语句(带别名)WHEN MATCH语句用来定义在源表中的行匹配目标表中的行时的行为,包括UPDATE、DELETE、INSERT,只可以更新目标表,如果更新其他表的话会返回错误;最多可以包含两个WHEN MATCH语句,第一个语句必须包含AND条件,当AND条件满足时,执行第一个WHEN MATCH,当AND条件不满足时,执行第二个WHEN M <a href="https://www.cnblogs.com/mayanlong/archive/2012/12/25/2831726.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/12/22/2829612.html
SQL Server 2008之存储过程的设计和实现 - 马啸西风
共有两类基本的system stored procedure:system stored procedure:T-SQL语言写的,在master数据库中提供的,大部分使用的是sp_前缀,在其他数据库中使用的时候,不需要指定master数据库作为他们的名称的一部分,典型应用于管理任务system extended stored procedure:非托管代码写的(主要是C++),通过DLL提供的,大部分使用的是xp_前缀,用来扩展无法使用T-SQL完成的任务还可以创建用户自定义的extended stored procedure,然后附加到SQL Server上,现在已经被遗弃,因为extend
2012-12-22T15:25:00Z
2012-12-22T15:25:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】共有两类基本的system stored procedure:system stored procedure:T-SQL语言写的,在master数据库中提供的,大部分使用的是sp_前缀,在其他数据库中使用的时候,不需要指定master数据库作为他们的名称的一部分,典型应用于管理任务system extended stored procedure:非托管代码写的(主要是C++),通过DLL提供的,大部分使用的是xp_前缀,用来扩展无法使用T-SQL完成的任务还可以创建用户自定义的extended stored procedure,然后附加到SQL Server上,现在已经被遗弃,因为extend <a href="https://www.cnblogs.com/mayanlong/archive/2012/12/22/2829612.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/12/22/2829607.html
SQL Server 2008之通过非聚集索引提高性能 - 马啸西风
非聚集索引也是基于二叉树,叶子节点存储的是指向表结构的指针,而不是数据,数据和索引是分开存储的,其Index ID=2或者更高;提高查询性能,降低数据修改性能;一张表最多可以建999个非聚集索引当表是作为堆构建时,叶子节点存储的是Row ID指针;当表是使用聚集键构建时,叶子节点存储的是聚集键,如果聚集键不唯一的话,还需要为每个数据行保存一份uniqueifier值获取索引信息的方法:SSMS:可以查看每个表的索引,还包括预先建好的报表,这些报表展示数据库的状态,其中就包括索引信息sp_helpindex系统存储过程Catalog Views:sys.indexes:索引类型、文件组或者par
2012-12-22T15:23:00Z
2012-12-22T15:23:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】非聚集索引也是基于二叉树,叶子节点存储的是指向表结构的指针,而不是数据,数据和索引是分开存储的,其Index ID=2或者更高;提高查询性能,降低数据修改性能;一张表最多可以建999个非聚集索引当表是作为堆构建时,叶子节点存储的是Row ID指针;当表是使用聚集键构建时,叶子节点存储的是聚集键,如果聚集键不唯一的话,还需要为每个数据行保存一份uniqueifier值获取索引信息的方法:SSMS:可以查看每个表的索引,还包括预先建好的报表,这些报表展示数据库的状态,其中就包括索引信息sp_helpindex系统存储过程Catalog Views:sys.indexes:索引类型、文件组或者par <a href="https://www.cnblogs.com/mayanlong/archive/2012/12/22/2829607.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/12/22/2829603.html
SQL Server 2008之读取查询计划 - 马啸西风
Execution Plan查询计划展示了SQL Server试图如何执行查询以及实际上是如何执行查询的;查询计划最佳使用方法不是查看一个查询计划,解决查询中性能最坏的地方,而是你认为SQL Server会如何执行你查询,并通过查询计划验证SQL Server是否按照你设想执行了查询计划查询执行过程:T-SQL解析,检查查询的语句是否符合语法对象名称确定,确定查询中对象名称指的是哪个底层对象查询优化,根据可用的统计信息,决定如何执行查询;不一定使用可能的最佳的查询计划,其目的是在合理的时间范围内使用满意的查询计划,因为寻找最佳的查询计划可能会消耗更多的时间,查询越复杂,需要评估查询计划的时间越
2012-12-22T15:21:00Z
2012-12-22T15:21:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】Execution Plan查询计划展示了SQL Server试图如何执行查询以及实际上是如何执行查询的;查询计划最佳使用方法不是查看一个查询计划,解决查询中性能最坏的地方,而是你认为SQL Server会如何执行你查询,并通过查询计划验证SQL Server是否按照你设想执行了查询计划查询执行过程:T-SQL解析,检查查询的语句是否符合语法对象名称确定,确定查询中对象名称指的是哪个底层对象查询优化,根据可用的统计信息,决定如何执行查询;不一定使用可能的最佳的查询计划,其目的是在合理的时间范围内使用满意的查询计划,因为寻找最佳的查询计划可能会消耗更多的时间,查询越复杂,需要评估查询计划的时间越 <a href="https://www.cnblogs.com/mayanlong/archive/2012/12/22/2829603.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/12/22/2829602.html
SQL Server 2008之表结构实现 - 马啸西风
Heap就是数据页之间没有顺序以及数据页中数据行之间没有顺序的表,是最简单的表结构,数据行被加到数据页第一个可用位置,如果当前页没有足够空间的话,就创建额外的数据页;SQL Server在称为Index Allocation Map的内部结构中使用一个条目跟踪可用的数据页,这个条目的index_id=0在堆上执行的操作:INSERT:每个新行都放在第一个可用页上UPDATE:数据行即可以仍然在同一页上(如果大小合适的话),或者被从当前页删除,并放到第一个可用页上DELETE:释放当前页的空间,数据没有被覆盖,空间仅仅是被标记为可以被重用(即数据不会立即被删除,只有在需要在这块被删除的空间上分配
2012-12-22T15:20:00Z
2012-12-22T15:20:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】Heap就是数据页之间没有顺序以及数据页中数据行之间没有顺序的表,是最简单的表结构,数据行被加到数据页第一个可用位置,如果当前页没有足够空间的话,就创建额外的数据页;SQL Server在称为Index Allocation Map的内部结构中使用一个条目跟踪可用的数据页,这个条目的index_id=0在堆上执行的操作:INSERT:每个新行都放在第一个可用页上UPDATE:数据行即可以仍然在同一页上(如果大小合适的话),或者被从当前页删除,并放到第一个可用页上DELETE:释放当前页的空间,数据没有被覆盖,空间仅仅是被标记为可以被重用(即数据不会立即被删除,只有在需要在这块被删除的空间上分配 <a href="https://www.cnblogs.com/mayanlong/archive/2012/12/22/2829602.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/12/22/2829600.html
SQL Server 2008之索引设计 - 马啸西风
当SQL Server访问表中的数据时,它扫描表的所有页或者使用索引减少需要扫描的行;有时SQL Server会创建临时索引以提高查询性能,但是这样的行为不是数据库管理员或者程序员可控的行为,并且只针对单次查询;除标准类型索引外,还包括其他类型索引:Full Text Index:提供灵活的文本查询Spatial Index:为Geometry、Geography类型创建的索引Primary and Secondary XML Index:帮助查询XML数据ANSI SQL的定义中并没有描述索引,索引被认为是数据库内部实现细节,SQL Server使用索引提高性能和实现特定的约束;当你创建主键
2012-12-22T15:18:00Z
2012-12-22T15:18:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】当SQL Server访问表中的数据时,它扫描表的所有页或者使用索引减少需要扫描的行;有时SQL Server会创建临时索引以提高查询性能,但是这样的行为不是数据库管理员或者程序员可控的行为,并且只针对单次查询;除标准类型索引外,还包括其他类型索引:Full Text Index:提供灵活的文本查询Spatial Index:为Geometry、Geography类型创建的索引Primary and Secondary XML Index:帮助查询XML数据ANSI SQL的定义中并没有描述索引,索引被认为是数据库内部实现细节,SQL Server使用索引提高性能和实现特定的约束;当你创建主键 <a href="https://www.cnblogs.com/mayanlong/archive/2012/12/22/2829600.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/12/22/2829597.html
SQL Server 2008之视图的设计和实现 - 马啸西风
Indexed Views:通过在视图上创建聚集索引将视图物化,通常用来提高查询性能,复杂的Join和聚合函数都被提前计算出来,避免在查询执行这些操作,以此来提高性能Views通常用来聚集Focus、简化、定制用户对数据库的视角,其优点包括:允许用户集中在和他们相关或者允许他们操作的那一小块数据上隐藏了查询的复杂性,用户不需要关心视图中涉及的复杂查询,他们可以像表一样操作视图简化用户许可管理,即提供一种安全机制,只允许用户通过视图访问数据,不允许用户直接操作底层表为应用程序提供导出的数据,许多应用程序没有权限执行存储过程或者T-SQL代码,只可以查询数据,视图将应用程序需要导出的数据独立出来提
2012-12-22T15:16:00Z
2012-12-22T15:16:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】Indexed Views:通过在视图上创建聚集索引将视图物化,通常用来提高查询性能,复杂的Join和聚合函数都被提前计算出来,避免在查询执行这些操作,以此来提高性能Views通常用来聚集Focus、简化、定制用户对数据库的视角,其优点包括:允许用户集中在和他们相关或者允许他们操作的那一小块数据上隐藏了查询的复杂性,用户不需要关心视图中涉及的复杂查询,他们可以像表一样操作视图简化用户许可管理,即提供一种安全机制,只允许用户通过视图访问数据,不允许用户直接操作底层表为应用程序提供导出的数据,许多应用程序没有权限执行存储过程或者T-SQL代码,只可以查询数据,视图将应用程序需要导出的数据独立出来提 <a href="https://www.cnblogs.com/mayanlong/archive/2012/12/22/2829597.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/12/22/2829596.html
SQL Server 2008之表的设计和实现 - 马啸西风
Table可以用来作为安全边界,即表级别安全许可;SQL Server中支持Column、Table级别安全许可,在SQL Server中还没有行级别安全许可,不过可以通过视图、存储过程、触发器来实现行级别安全许可A candidate key用来唯一标示一行,主键就是从潜在的多个candidate key中选择的;通常来说,如果表经过了正确的规范化处理的话,一个表应该只有一个candidate key可以用来作为主键,但这不是绝对的;主键必须唯一、不允许为null、不允许修改surrogate key用来作为表的唯一标示,不是根据真正的数据得来的,和表中其他列不相关;Natural Key则
2012-12-22T15:13:00Z
2012-12-22T15:13:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】Table可以用来作为安全边界,即表级别安全许可;SQL Server中支持Column、Table级别安全许可,在SQL Server中还没有行级别安全许可,不过可以通过视图、存储过程、触发器来实现行级别安全许可A candidate key用来唯一标示一行,主键就是从潜在的多个candidate key中选择的;通常来说,如果表经过了正确的规范化处理的话,一个表应该只有一个candidate key可以用来作为主键,但这不是绝对的;主键必须唯一、不允许为null、不允许修改surrogate key用来作为表的唯一标示,不是根据真正的数据得来的,和表中其他列不相关;Natural Key则 <a href="https://www.cnblogs.com/mayanlong/archive/2012/12/22/2829596.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/12/22/2829594.html
SQL Server 2008之数据类型 - 马啸西风
数据类型的选择帮助优化查询,比如针对int类型列和针对文本类型列可能会生成完全不同的查询计划三种数据类型:系统数据类型别名数据类型:用户可以为系统数据类型提供一个别名,并且可以对数据类型做进一步限制,这样可以保持数据库和应用程序的一致性用户自定义数据类型:引入的托管代码中的数据类型,包括CLR中的系统数据类型和CLR中用户自定义数据类型整数数据类型:tinyint存储的是一个字节(8位),值范围是0-255smallint存储的是两字节(16位),值范围是-32768-32767int存储的是四字节(32位),值范围是-2147483648-2147483647bigint存储的是八字节,值范
2012-12-22T15:11:00Z
2012-12-22T15:11:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】数据类型的选择帮助优化查询,比如针对int类型列和针对文本类型列可能会生成完全不同的查询计划三种数据类型:系统数据类型别名数据类型:用户可以为系统数据类型提供一个别名,并且可以对数据类型做进一步限制,这样可以保持数据库和应用程序的一致性用户自定义数据类型:引入的托管代码中的数据类型,包括CLR中的系统数据类型和CLR中用户自定义数据类型整数数据类型:tinyint存储的是一个字节(8位),值范围是0-255smallint存储的是两字节(16位),值范围是-32768-32767int存储的是四字节(32位),值范围是-2147483648-2147483647bigint存储的是八字节,值范 <a href="https://www.cnblogs.com/mayanlong/archive/2012/12/22/2829594.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/10/31/2748395.html
启用Application library caching时,将多个不同步的程序集打包到一个ZIP包中的问题 - 马啸西风
当用户重新访问网站时,Application library caching能够提高启动性能,当用户第一次访问网页的时候,Silverlight插件下载应用程序包和所有的外部程序集,这些文件会被加入到浏览器缓存中,以便在后续的访问中能够重用这些文件,关于Application library caching的详细介绍,可以参考下面的文档:http://msdn.microsoft.com/en-us/library/dd833069(v=vs.95).aspx 如果在实际项目中启用了Application library caching,并将多个公用程序集打包到一个ZIP包中,那么这些程...
2012-10-31T09:25:00Z
2012-10-31T09:25:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】当用户重新访问网站时,Application library caching能够提高启动性能,当用户第一次访问网页的时候,Silverlight插件下载应用程序包和所有的外部程序集,这些文件会被加入到浏览器缓存中,以便在后续的访问中能够重用这些文件,关于Application library caching的详细介绍,可以参考下面的文档:http://msdn.microsoft.com/en-us/library/dd833069(v=vs.95).aspx 如果在实际项目中启用了Application library caching,并将多个公用程序集打包到一个ZIP包中,那么这些程... <a href="https://www.cnblogs.com/mayanlong/archive/2012/10/31/2748395.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2012/09/28/2706455.html
垃圾收集导致的概率性发生的bug - 马啸西风
今天开发过程中遇到一个概率性发生的bug,时而出现时而消失,而且在测试工程中无法重现,即使在实际的开发工程中也无法稳定重现。 首先说一下bug的背景:开发界面时需要一个带有提示文本的TextBox,即在TextBox的Text属性为空时,显示提示文本,比如经常见到的登录界面的用户名文本框,在没有输入任何文本时提示用户“请输入用户名...”这样的提示文本,姑且将其这个文本框命名为TipTextBox,该类从TextBox继承,TipTextBox逻辑比较简单,就是重写TextBox的Template,在TextBox的Template中加入了一个TextBlock用来显示提示文本,这个Te...
2012-09-27T16:07:00Z
2012-09-27T16:07:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】今天开发过程中遇到一个概率性发生的bug,时而出现时而消失,而且在测试工程中无法重现,即使在实际的开发工程中也无法稳定重现。 首先说一下bug的背景:开发界面时需要一个带有提示文本的TextBox,即在TextBox的Text属性为空时,显示提示文本,比如经常见到的登录界面的用户名文本框,在没有输入任何文本时提示用户“请输入用户名...”这样的提示文本,姑且将其这个文本框命名为TipTextBox,该类从TextBox继承,TipTextBox逻辑比较简单,就是重写TextBox的Template,在TextBox的Template中加入了一个TextBlock用来显示提示文本,这个Te... <a href="https://www.cnblogs.com/mayanlong/archive/2012/09/28/2706455.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2011/03/07/1974775.html
DataGridView中下拉列表框的实现 - 马啸西风
最近一直在北京找工作,上网不是特别方便,也没有时间更新自己的博客。今天就来谈谈DataGridView里怎么更好的实现下拉列表吧! 方式一:如下图所示,该方式也是较为简单的一种。 你只需要添加一列类型为DataGridViewComboBoxColumn的列,然后添加数据源即可。但是我们看到这种方式的下拉列表看起来并不是十分的美观,至少我个人是这么觉得的。 方式二:如下图所示。 如上所示,这样只有在每次点击特定列的单元格时,才会显示下拉列表。其实原理也非常简单,只需要在选择DataGridView的单元格时,判断是不是要显示下拉列表的列,如果是的话,将下拉列表显示在点击的单元格内,对原有的单.
2011-03-07T08:37:00Z
2011-03-07T08:37:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】最近一直在北京找工作,上网不是特别方便,也没有时间更新自己的博客。今天就来谈谈DataGridView里怎么更好的实现下拉列表吧! 方式一:如下图所示,该方式也是较为简单的一种。 你只需要添加一列类型为DataGridViewComboBoxColumn的列,然后添加数据源即可。但是我们看到这种方式的下拉列表看起来并不是十分的美观,至少我个人是这么觉得的。 方式二:如下图所示。 如上所示,这样只有在每次点击特定列的单元格时,才会显示下拉列表。其实原理也非常简单,只需要在选择DataGridView的单元格时,判断是不是要显示下拉列表的列,如果是的话,将下拉列表显示在点击的单元格内,对原有的单. <a href="https://www.cnblogs.com/mayanlong/archive/2011/03/07/1974775.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/mayanlong/archive/2011/01/25/1944937.html
C#之集合 - 马啸西风
C#的集合功能可谓十分强大,这里着重探讨集合中非常重要的两个接口:IEnumerableT和IEnumeratorT. 首先查看如下代码:代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--1classStudent2{3publicint_id;4publicstring_name;56publicStudent(intid,stringname)7{8this._id=id;9this._name=name;10}1112publi
2011-01-25T13:32:00Z
2011-01-25T13:32:00Z
马啸西风
https://www.cnblogs.com/mayanlong/
【摘要】C#的集合功能可谓十分强大,这里着重探讨集合中非常重要的两个接口:IEnumerableT和IEnumeratorT. 首先查看如下代码:代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--1classStudent2{3publicint_id;4publicstring_name;56publicStudent(intid,stringname)7{8this._id=id;9this._name=name;10}1112publi <a href="https://www.cnblogs.com/mayanlong/archive/2011/01/25/1944937.html" target="_blank">阅读全文</a>