摘要: 与SQL 2005之前的版本相比,2005及之后的版本对数据库对象的管理及查询的执行上下文行为做了两个重要的改变:1. 用户-架构(User-Schema)分离。即用户不再作为数据库对象的直接拥有者(owner),而是在数据库对象和用户之前加了一层schema。Schema即数据库对象的集合,用户可以拥有多个schema,每个用户有一个default schema。2. 执行查询的时候可以切换用户上下文。这包括在批处理中通过EXECUTE AS语句直接切换上下文,以及另一个更常见的用法:在创建存储过程或其它模块时指定用户执行的上下文(WITH EXECUTE AS)。关于第二点,有一个有意思的 阅读全文
posted @ 2012-12-10 11:26 Kelvinliu 阅读(2632) 评论(0) 推荐(1) 编辑
摘要: 在 SQL Server 中,可以定义以下用户定义模块的执行上下文:函数(内联表值函数除外)、过程、队列和触发器。通过指定执行模块的上下文,可以控制 数据库引擎使用哪一个用户帐户来验证对模块引用的对象的权限。这有助于人们更灵活、有力地管理用户定义的模块及其所引用对象所形成的对象链中的权限。必须而且只需授予用户对模块自身的权限,而无需授予用户对被引用对象的显式权限。只有运行模块的用户必须对模块访问的对象拥有权限。Transact-SQL 语法约定语法Functions (except inline table-valued functions), Stored Procedures, and D 阅读全文
posted @ 2012-12-10 11:25 Kelvinliu 阅读(728) 评论(0) 推荐(0) 编辑
摘要: 相同点:truncate和不带where子句的delete, 以及drop都会删除表内的数据不同点:1. truncate和 delete只删除数据不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.2.delete语句是DML,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.truncate,drop是DDL, 操作立即生效,原数据不放到rollback segment中,不能回滚 阅读全文
posted @ 2012-11-30 10:25 Kelvinliu 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 某日递简历,顺便和面试官亲密接触,被问及上面三个数据库操作的异同,用过delete,drop未用过truncate,网页搜索,初步认识。DELETEThe DELETE command is used to remove rows from a table. A WHERE clause can be used to only remove some rows. If no WHERE condition is specified, all rows will be removed. After performing a DELETE operation you need to COMMIT 阅读全文
posted @ 2012-11-30 10:10 Kelvinliu 阅读(568) 评论(0) 推荐(0) 编辑
摘要: Truncate Table Truncate是SQL中的一个删除数据表内容的语句,用法是: 语法 TRUNCATE TABLE name 参数 name 是要截断的表的名称或要删除其全部行的表的名称。 下面是对Truncate语句在MSSQLServer2000中用法和原理的说明: Truncate table 表名 速度快,而且效率高,因为: TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 DELETE 语句每次删... 阅读全文
posted @ 2012-11-30 10:05 Kelvinliu 阅读(365) 评论(0) 推荐(0) 编辑
摘要: SQL中ON和WHERE的区别数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。在使用leftjion时,on和where条件的区别如下:1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有leftjoin的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。假设有两张表:表1:tab2idsize110220330表2:tab2sizename10AAA20BBB20CCC两条SQL:1、select*formtab1lef 阅读全文
posted @ 2012-11-29 16:16 Kelvinliu 阅读(301) 评论(0) 推荐(0) 编辑