2009-11-10 50 views
1

我必須編寫一個測試,要求將大量數據存儲在文本列中。如何使用REPLICATE()在SQL Server文本列中插入多於8k的?

當我嘗試這個(插件2個十億X字符):

INSERT INTO table VALUES (REPLICATE('X', 2000000000)) 

這就是我得到:

SELECT *, DATALENGTH(textCol) FROM table 

XXXXXXXXXXXXX .... 8000

我希望超過8000.任何想法,我哪裏出錯了?我的google-fu讓我失望。

警告:是的,不推薦使用文本列。我確信有很多非常有效和合理的理由,爲什麼要將它們用作批量數據存儲是一個壞主意。假設我正在處理一個遺留系統,該系統正好具有存儲大量批量數據的文本列,並且我必須編寫測試以確定我的第三方代碼是如何處理這些問題的。

回答

9

REPLICATE函數returns data in the same type as was passed in。由於您傳遞的是正常引用的字符串,因此會創建一個varchar(不要與varchar(MAX)混淆),它的最大容量爲8000個字符。

試試這個:

INSERT INTO table VALUES (REPLICATE(convert(varchar(MAX), 'X'), 2000000000)) 

我不能讓你去沒有你使用varchar(MAX)(或nvarchar(MAX))列,而不是text強制性的建議,但是這應該做的伎倆。我現在不是在SSMS面前,但你可能必須convert(text, REPLICATE(convert(varchar(MAX), 'X'), 2000000000)),但我不這麼認爲。無論哪種方式,這應該做的伎倆。

+0

動機爲他的建議(http://msdn.microsoft.com/en-us/library/ms187993 .aspx):未來版本的Microsoft SQL Server將刪除「** ntext **,** text **和** image **數據類型。避免在新開發工作中使用這些數據類型,並計劃修改當前使用它們的應用程序,而不是使用nvarchar(max),varchar(max)和varbinary(max)。「 – MaD70 2009-11-10 17:00:16

4

只投內嵌到CLOB數據類型(複製的回報一樣傳遞),就像這樣:

INSERT INTO table VALUES (REPLICATE(cast('X' as varchar(max)), 2000000000)) 
+0

作爲一個筆記,亞當羅賓遜的答案在我發佈後彈出,他有一些額外的想法,可能應該被認爲是更好的答案,因爲我很懶,並沒有像他那樣鏈接。在他的答案中包含內聯方法,並且您有幾個選項。 – chadhoc 2009-11-10 16:44:11

+0

+1爲我做了同樣的事情。我已經發布了我的答案後想到轉換,我不只是偷獵你的;) – 2009-11-10 16:45:45

+0

+1。感謝你的回答。 – 2009-11-10 17:00:49

相關問題