SQL Server 数据库中的几个常见的临界值
本文出处:http://www.cnblogs.com/wy123/p/6709520.html
1,SQL语句或者存储过程的最大长度(SQL字符串容量)是多少?
经常有人问,我的SQL语句是拼凑出来的,可能很长,如果太长了,是不是SQL Server支持不动了?
SQL语句的或者存储过程的最大长度是65,536 * Network packet size,那么这个Network packet size是个什么鬼?
参考如下截图,是网络包的大小,默认是4096个字节,也就是4kb,
那么默认情况下,SQL语句的最大长度就是65,536 * 4kb = 255.996093MB,接近256MB了,
因此正常情况下,可以不用顾忌“我的SQL语句太长了,是不是要撑爆SQL Server了”,但这并不代表我就支持以字符串的形式拼凑出来一个很长的SQL语句的做法。
上述配置也可以从配置表中查询
2,Print 关键字可以打印出来的字符串或者变量的最大字节数是8000
print关键字在print字符串的时候,可以打印出来的字符串的最大长度是8000个字节,如果字符串或者变量的长度超过8000个字节,会被截断,
这里的8000是字节数,而不是字符数,如果字符串是UNICODE字符,那么打印出来的字符的个数将会是4000,包括肉眼看不到的回车换行。
因为有人在调试存储过程的时候,发现print出来的东西跟预期的不一致,也不要觉得奇怪!
如截图,原始字符串的每行都是一样长的,print出来就被截断了,原因就在这里
3,SELECT语句查询时候,显示在SSMS表格中的最大字符长度
这个长度的默认设置时65535,也就是说如果是varchar(max)或者nvarchar(max),结果超出65535个字节的,显示的结果是会被截断的,
但这并不证明查询结果是错误的,仅仅是没有将结果完全显示在SSMS的表格中而已。
如果有长字段,在复制查询结果的时候要小心,直接复制很有可能复制的是一个残缺的结果。
不过测试的时候,倒是跟这里的65535有一点差异。
4,varchar(max)和nvarchar(max) varbinary(max)最大支持多大的存储容量
varchar(max)和nvarchar(max)的最大存储容量都是2^31-1和字节,也就是差一个字节够2GB,
一本纯文本的TXT电子书才多大,因此大多数情况下不用顾忌说我存储的字符串很长,varchar(max)到底行不行。
但是nvarchar(max)存储的字符的最大个数要比varchar(max)少一倍,因为nvarchar(max)一个字符占两个字节。要弄清楚存储对象的编码类型。
测试验证一下最大存储容量的问题
5,CTE递归过程中支持的最大递归次数
默认情况下最大递归次数是100,可以最大强制递归到32767次
在默认情况下,比如如下的SQL递归99次,执行起来是没有问题的
如下的SQL语句执行之后就会报错,超出了默认递归的最大次数
如下是通过OPTION (MAXRECURSION 32767)的方式强制递归到最大的32767次
6,SQL Server数据库中时间类型字段的范围
与数值型的类型类似,时间类型也一样,每种类型都有一定的范围,不是任意一个类型的变量都可以随便赋值的。
操作时间类型数据的时候,一不小心就出错了,原因是不同的时间类型有不同的取值范围,范围不对的时候也会out-of-range错误
各种时间类型的取值范围以及占用的空间如下
至于同一种类型,占用空间不同的原因是表示的精度不一样的时候,占用的空间不一样
7,字符型变长字段的长度最大值(非max)的情况下:8000
varchar(n)或者char(n)中,n的最大值是8000,如果是nvarchar(n)或者nchar(n),则最大值为4000
一个表中所有的定长的字段长度不能超过8053个字节
想起来再补充
转载于:https://www.cnblogs.com/wy123/p/6709520.html
SQL Server 数据库中的几个常见的临界值相关推荐
- 清空SQL Server数据库中所有表数据的方法(转)
清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...
- 在ASP.NET中将图片存储到Sql Server数据库中
在ASP.NET中将图片存储到Sql Server数据库中 http://hi.baidu.com/rayshow/blog/item/360e8ff9662c8b5a252df268.html 索引 ...
- mysql raiserror_RAISERROR在SQL Server数据库中的用法
raiserror 是由单词 raise error 组成 raise 增加; 提高; 提升 raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql ser ...
- SQL Server数据库中、获得刚插入新记录的自动ID号
以下的文章主要是介绍在SQL Server数据库中正确获得刚插入一条新记录的自动ID号的实际操作过程,下面就是文章对其的主要内容的具体描述,望大家在浏览之后会对其有更深的了解. 使用[IDENT_CU ...
- 从sqlserver中数据写入mysql_[SQL Server]SQL Server数据库中如何返回INSERT INTO语句插入/写入数据后的记录值(比如ID等)?...
问题描述 SQL Server数据库中,有时候当我们使用INSERT INTO语句写入数据后,需要返回写入数据对应的自增ID或者GUID,以便根据此记录进行后续的操作.那么SQL语句如何实现返回记录值 ...
- SQL Server数据库中使用sql脚本删除指定表的列
在SQL Server数据库中删除某一列,使用数据库管理工具直接可视化操作是很简单的,但是如果要用sql脚本呢?可能你会说很简单,直接用 ALTER TABLE [要删除的字段所在的表名] DROP ...
- 浅析SQL Server数据库中的伪列以及伪列的含义
浅析SQL Server数据库中的伪列以及伪列的含义 原文:浅析SQL Server数据库中的伪列以及伪列的含义 本文出处:http://www.cnblogs.com/wy123/p/6833116 ...
- SQL Server数据库中批量导入数据的四种方法总结
在软件项目实施的时候,数据导入一直是项目人员比较头疼的问题.其实,在SQL Server中集成了很多成批导入数据的方法.有些项目实施顾问头疼的问题,在我们数据库管理员眼中,是小菜一碟.现在的重点就是, ...
- 通过VB向SQL Server数据库中录入数据
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 一.数据录入 通过VB向SQL Se ...
最新文章
- IOS中CoreLocation框架地理定位
- 【.NET开发之美】如何提高.NET DataMap中的加载速度
- [快速数论变换 NTT]
- 整理大型网站架构必知必会的几个服务器知识
- bat脚本 git pull_bat文件方式对git进行操作
- 记一次ora-1652错误的解决过程
- 前端学习(1607):跨域请求
- java执行数据库命令行_java程序执行命令行,解锁数据库表
- ScheduleJobFactory
- linux链接时报未定义的引用,g ++链接或引用不与本地安装的库一起使用:未定义的引用...
- stm32f407wet6安装linux,elua移植到STM32F407VET6流程
- sphereface result
- 如今有线电视还有必要续费吗
- ClassNotFoundException和NoClassDefError之间的区别
- 解决systemback 无法生成超过4G的iso的问题
- Leetcode no. 347
- 怎样搭建serveru ftp个人服务器
- 在Centos7上安装Docker
- 浅谈高内聚与松耦合,各人自扫门前雪,莫管他人瓦上霜
- Coding and Paper Letter(八十七)
热门文章
- 深度优先搜索算法的通用解法
- mysql开源内库_MySQL数据库(查询语句)
- 我的内核学习笔记14:内核设备树学习
- [大学回忆录-思想]一种能力的培养
- linux oops产生原理,kernel panic , Oops 等cpu异常的分析与定位
- 【Elasticsearch】Elasticsearch 中增加分片数量,聚合一定会变快吗?
- 【kafka】Kafka Fetch Session 剖析
- 【ElasticSearch】Es 源码之 GatewayMetaState 源码解读
- 【Java】分享一个诡异的可见性问题
- 【hortonworks/registry】诡异问题之启动了却无法访问