你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
没有找到相关结果
gogodiy - 天善智能数据库专家、Tableau爱好者 2015-12-11 回答
赞同来自: 郑大鹏
要回复问题请先登录或注册
推荐一份编程学习资源,包含了各类编程语言学习进阶路线图、视频教程、配套书籍文档、数百份面经,各大厂面试真题。编程语言包括:Java、前端、PHP、Python、Linux运维、软件测试、数据解构与算法、C语言、go语言等
微信扫码关注公众号,发送 "编程"获取资源
1 个回复
gogodiy - 天善智能数据库专家、Tableau爱好者 2015-12-11 回答
赞同来自: 郑大鹏
表变量必须显示定义,不能使用SELECT * INTO 表变量或INSERT INTO 表变量 SELECT的方式创建
表变量的作用域(或者说生命周期)在当前批处理语句中,一旦执行完毕,被自动清除。
表变量存储在内存中,不支持非聚集索引,使用约束、默认值、计算列的时候不能引用自定义函数,没有锁的机制,事务也只针对表变量更新数据,因此生成的日志很小。
当用户访问表变量的时候,不会产生日志。
表变量本身虽然是一个变量,但不能赋值给另一个变量。
不能使用TRUNCATE命令。
表变量的统计信息是不可信的。
从MSSQL2008R2开始,表变量可以作为存储过程的参数。
表变量可以存在于内存和磁盘。
表变量使用当前数据库的排序规则。
动态SQL需要使用表变量的话,必须在动态SQL中定义。
临时表:
分为局部临时表(使用#开头)和全局临时表(使用##开头)。
局部临时表生命周期为当前会话,一旦会话结束会自动删除。
全局临时表生命周期为所有连接会话,但是当创建它的会话结束后,也会被自动删除。
临时表的名称不能超过116个字符,因为系统会自动在后面添加标识码。
临时表具有表的一般属性,但是不能分区,不能设置外键,临时表的列数据类型,必须是TempDB中存在的数据类型,换句话说,临时表不能使用自定义数据类型。(自定义数据类型是数据库级别,而临时表只存在于TempDB数据库)
临时表可以使用CREATE、SELECT * INTO、INSERT INTO SELECT的方式创建。
临时表上的统计是相对可信的。
临时表可以存在于内存和磁盘。
临时表使用TempDB数据库的排序规则。
可以先创建临时表,然后在动态SQL中使用。
公共表达式(CTE):
CTE只是一个执行结果集,结果集,结果集(重要的话说三遍)。
CTE存在于外部查询中,它对同一批处理中的其他语句不可见。
CTE不能被嵌套,也就是CTE里面不能再定义新的CTE。
同一批语句中可以创建多个CTE,后面的CTE可以引用前面的CTE。
可以在一次查询中多次引用同一个CTE。
对CTE中记录的删除、修改同样可以作用到CTE对应的数据表。
CTE可以递归使用。