2013-02-08 95 views
1

我試圖將一些長字符串轉換爲varbinary(max)作爲INSERT的一部分。 http://msdn.microsoft.com/en-us//library/ms188362.aspx表示varbinary(max)最多可容納2^31-1個字節。但是,當我使用:將長度超過8000個字符的字符串轉換爲Varbinary(MAX)

CONVERT(varbinary(max),"ReallyLongString...") 

該字符串被截斷爲8000個字符。

關於如何將這些字符串轉換爲varbinary(max)而不截斷的任何想法?

謝謝!

+3

爲什麼不把它們放在'varchar(max)'中? – 2013-02-08 16:00:56

+0

這是一個現有的數據庫,該字段是一個VARBINARY(MAX)字段。沒有轉換消息「不允許將數據類型varchar隱式轉換爲varbinary(max),使用CONVERT函數來運行此查詢。」被展示。 – 2013-02-08 16:08:28

回答

1

由於答案發生在評論中,我會在這裏添加它並關閉問題。有問題的長字符串由多個連接字符串組成。

馬丁·史密斯給了這個答案: 「確保參與串聯的第一個字符串轉換爲VARCHAR(最大值)VARCHAR(n)的+ VARCHAR(N)將在8000個字符截斷不會產生一個varchar(最大)「

解決了這個問題。感謝Martin和Joacim Isaksson的幫助。

3

這適用於SQL Server 2012;

-- Insert 
INSERT INTO myTable (value) VALUES 
    (CAST('<really long string>' AS VARBINARY(MAX))); 

-- Retrieve 
SELECT CAST(value AS VARCHAR(MAX)) FROM myTable; 

插入一個10K的字符值將得到相同的值返回,對得到的VARCHAR(MAX)使用LEN驗證。

-- Validate 
SELECT LEN(CAST(value AS VARCHAR(MAX))) FROM myTable; 

> 10000 

An SQLfiddle to play with。可悲的是,SQLfiddles設置只能使用8k字符,因此必須在變量中構建10k字符串。
如上所述,在本地SQL管理器中使用正常的帶引號的字符串常量。

+0

這對我不起作用,我得到8000作爲LEN()的輸出結果 – 2013-02-08 16:42:45

+0

@LouisFellows對於SQL Server 2012? – 2013-02-08 16:43:37

+0

@JoacimIsaksson是啊 – 2013-02-08 16:46:13

相關問題