将超过8000个字符的字符串转换为Varbinary(MAX)

时间:2013-02-08 15:59:30

标签: sql sql-server-2012

我正在尝试将一些长字符串转换为varbinary(max)作为INSERT的一部分。 http://msdn.microsoft.com/en-us//library/ms188362.aspx表示varbinary(max)最多可以容纳2 ^ 31-1个字节。但是,当我使用:

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

字符串被截断为8000个字符。

关于如何在没有截断的情况下将这些字符串转换为varbinary(max)的任何想法?

谢谢!

2 个答案:

答案 0 :(得分: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管理器中使用正常的引用字符串常量。

答案 1 :(得分:1)

由于答案发生在评论中,我将在此处添加并关闭问题。有问题的长字符串由许多连接的字符串组成。

马丁史密斯给出了这个答案: “确保连接中涉及的第一个字符串被强制转换为varchar(max)。varchar(n)+ varchar(n)将截断8,000个字符而不产生varchar(max)”

这解决了这个问题。感谢Martin和Joacim Isaksson的帮助。