我正在尝试将一些长字符串转换为varbinary(max)作为INSERT的一部分。 http://msdn.microsoft.com/en-us//library/ms188362.aspx表示varbinary(max)最多可以容纳2 ^ 31-1个字节。但是,当我使用:
CONVERT(varbinary(max),"ReallyLongString...")
字符串被截断为8000个字符。
关于如何在没有截断的情况下将这些字符串转换为varbinary(max)的任何想法?
谢谢!
答案 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的帮助。