zoukankan      html  css  js  c++  java
  • 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个字节

    想起来再补充

  • 相关阅读:
    【BZOJ5286】[HNOI2018]转盘(线段树)
    【BZOJ2003】[HNOI2010]矩阵(搜索)
    【BZOJ2000】[HNOI2000]取石头游戏(贪心,博弈论)
    【BZOJ1998】[HNOI2010]物品调度(并查集,模拟)
    【BZOJ2001】[HNOI2010]城市建设(CDQ分治,线段树分治)
    【BZOJ1925】[SDOI2010]地精部落(动态规划)
    【BZOJ1856】[SCOI2010]字符串(组合数学)
    【BZOJ1826】[JSOI2010]缓存交换(贪心)
    【BZOJ1823】[JSOI2010]满汉全席(2-sat)
    【BZOJ1822】[JSOI2010]冷冻波(二分,网络流)
  • 原文地址:https://www.cnblogs.com/wy123/p/6709520.html
Copyright © 2011-2022 走看看