0

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

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

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

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

谢谢!

4

2 回答 2

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 字符值将返回相同的值,并使用LEN生成的 VARCHAR(MAX) 进行验证。

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

> 10000

一个可以玩的 SQLfiddle。可悲的是,SQLfiddles 设置只能使用 8k 个字符,因此必须在变量中构建 10k 个字符串。
与本地 SQL 管理器中的普通带引号的字符串常量一样工作。

于 2013-02-08T16:18:54.433 回答
1

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

Martin Smith 给出了这个答案: “确保将连接中涉及的第一个字符串转换为 varchar(max)。varchar(n) + varchar(n) 将在 8,000 个字符处截断,不会产生 varchar(max)”

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

于 2013-02-12T09:14:52.920 回答