2014-10-20 27 views
0

我想創建一個最大(足夠大)的數據類型,並且我希望將內存分配給該新變量,而無需嘗試在其中插入某些內容。我需要它用於測試目的。創建最大數據類型而不插入變量

我想我可以用

varchar(max) 

但是,當然,VAR代表變量,如果未插入值,然後將其分配零內存來我的VARCHAR。然後我想只使用char(max),但這似乎不適用於TSQL。

有什麼建議嗎?

+0

'char(8000)'是您在SQL Server中允許的'char'的[最大定義](http://msdn.microsoft.com/en-us/library/ms176089.aspx)。但是,您也[有限](http://msdn.microsoft.com/en-us/library/ms143432.aspx)的行長度限制爲8060字節。可變長度字段可以解決這個問題。我不確定是否有固定長度的字段。我從來沒有需要測試它。但是,如果你從未得到空白區域的準確測試,那就不會讓我感到驚訝。 SQL Server有很多優化,並且可能包含'char'字段的空白技巧。 – 2014-10-20 16:24:51

+0

@BaconBits謝謝你。我會嘗試。我有一個SSIS包,當它傳輸一定數量的列時會失敗。我認爲這與行所用的內存有關。這就是爲什麼我需要一種簡單的方法將特定數量的內存插入到表中並測試軟件包。 – 2014-10-20 19:48:04

回答

0

BaconBits的建議後,我結束了使用:

char(7000) 

好像7000是在TSQL一個字符的最高分辨率。最大允許的錶行大小爲8060字節,並且還需要佔用7個字節的內部開銷。

以外的問題範圍: 當我嘗試字符(7001)失敗,說:「創建或改變表'myTest'失敗,因爲最小行大小將是14810,包括7字節的內部開銷。 8060字節的最大允許錶行大小「。我認爲編譯器正在做的事情,它沒有告訴我們,因爲7001字節加上7字節的開銷不大於8060字節。

+0

你有桌子上的其他領域?這會使它大於8k的限制。不過,像'create table #test(field char(8000)not null)'應該可以工作得很好。不過,不知道爲什麼添加一個字符會增加行的大小。 – 2014-10-21 19:18:03

+0

@BaconBits是的,我在表中有另一個字段。它是name_char,它的類型是char(1)。僅僅因爲好奇心我刪除了name_char,然後試圖將我的唯一列更改爲char(6000),這是第一次工作。然後我試圖將其更改爲char(7000),但它不起作用。然後我嘗試了字符(5000),它的工作。最後我再次嘗試了char(6000),並且出現錯誤。似乎它是動態的,但我不知道它是如何確定的,以及爲什麼這樣做。 :( – 2014-10-21 22:22:25

+0

這只是bizzare,我不知道它是如何與表被存儲在磁盤上?也許[行可能跨越羣集](http://technet.microsoft.com/en-us/ library/dd758814(v = sql.100).aspx)? – 2014-10-22 12:56:21