select c.name, t.name, c.length
from syscolumns c
c.length給我-1對於具有最大e.g VARCHAR(最大值)的任何列獲得從syscolumns中的SQL Server中的VARCHAR(最大值)的最大長度
我應該怎麼做才能長?
select c.name, t.name, c.length
from syscolumns c
c.length給我-1對於具有最大e.g VARCHAR(最大值)的任何列獲得從syscolumns中的SQL Server中的VARCHAR(最大值)的最大長度
我應該怎麼做才能長?
sys.columns的長度數據類型是smallint,而varchar(max)的最大長度是21億,所以它有一個保存實際長度的問題。 -1在文檔中用於表示varchar(max),varbinary(max),nvarchar(max)和xml。
http://msdn.microsoft.com/en-us/library/ms176106(v=sql.100).aspx
如果你真的需要的數量,那麼你就需要一個case語句來代替-1,(2^31)-1
如果你想獲得物理數據的長度,那麼您需要根據您需要的信息,在表上使用其中的數據對錶格上的最大/最小/平均長度進行平均。當查詢字段的長度時,DATALENGTH
返回使用的字節數,LEN
返回字符數。
如所見HERE:
可變長度,非Unicode字符數據。 n可以是從1到8,000的值。 max表示最大存儲大小爲2^31-1字節。存儲大小是輸入的數據的實際長度+ 2個字節。輸入的數據長度可以是0個字符。 varchar的ISO同義詞是char變量或字符變量。
換言之,最大= 2147483647個字節如果所有可能的空間被佔用..
每一行可以改變在塔的長度。因此-1的結果-1
-1意味着該列的類型爲max
。根據文檔,最大長度是max
類型。 MAX類型具有2GB的最大長度,如果沒有指定FILESTREAM屬性,或最大尺寸僅由disk size available限於:
所述的BLOB的大小僅由文件 系統的體積大小的限制。 2GB文件大小的標準varbinary(max)限制 不適用於存儲在文件系統中的BLOB。
因此你的問題真的沒有答案。您可以使用DATALENGTH
詢問表中任何實際值的實際大小。
+1 - 忘記文件流的長度 – Andrew 2012-01-17 18:55:52
原創解讀:)。但是對於任何VAR類型也可以這樣說,比如VARCHAR(100):每行的長度可以在0和100之間變化。然而長度是100,而不是-1。 -1真的意味着MAX類型,是一種慣例。 – 2012-01-17 18:02:47