SQL Server 資料庫中的幾個常見的臨界值

2021-09-22 21:54:07 字數 2584 閱讀 6787

原文:

sql server 資料庫中的幾個常見的臨界值

本文出處:

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錯誤

各種時間型別的取值範圍以及占用的空間如下

至於同一種型別,占用空間不同的原因是表示的精度不一樣的時候,占用的空間不一樣

想起來再補充

Qt 連線SQL Server資料庫出現的幾點問題

1.主要是設定伺服器名稱,資料庫名稱 登入名 密碼這幾項,需要注意的是 server 1 這裡等號前後不要出現空格,像這樣 server 1 是不行的。2 資料庫名稱那裡,剛開始我只寫了我需要連線的資料庫名稱,但是死活連線不上,出現這種錯誤,後來在網上查詢的解決方法是,在資料庫名稱後面新增上埠號14...

Hibernate中查詢資料庫的幾

hibernate中查詢資料庫的幾種方法 陽東明 hibernate中查詢資料庫中的資料是很重要的,我們有4種方法 1 get 和load 他們的用法完全一樣,都需要兩個引數,第1個是持久化物件類名.class,第2個是行號,也就是說這2個方法都只能返回固定的某一行的資料,但是需要注意的是 當輸入的...

資料庫插入資料的幾中寫法

1 db.execsql insert into 表名 欄位1,欄位2 values 值1 值2 值1,值2 可以是乙個給定的字串,還可以是物件的資料寫法如下 db.execsql insert into ftpservers hostname,port,acountname,password va...