使用SQL-Server 2008并通过明显修改以下脚本将字符串文字连接到8000多个字符,我总是得到结果8000.有没有办法将字符串文字标记为varchar(max)?
DECLARE @t TABLE(test varchar(max));
INSERT INTO @t VALUES('0123456789012345678901234567890123456789'
+'0123456789012345678901234567890123456789'
+'...和前一行的200倍'
);
从@t
中选择数据长度(测试)答案 0 :(得分:3)
我在SQL Server 2008上使用了以下代码
CREATE TABLE [dbo].[Table_1](
[first] [int] IDENTITY(1,1) NOT NULL,
[third] [varchar](max) NOT NULL
) ON [PRIMARY]
END
GO
declare @maxVarchar varchar(max)
set @maxVarchar = (REPLICATE('x', 7199))
set @maxVarchar = @maxVarchar+(REPLICATE('x', 7199))
select LEN(@maxVarchar)
insert table_1( third)
values (@maxVarchar)
select LEN(third), SUBSTRING (REVERSE(third),1,1) from table_1
您在示例中插入的值暂时存储为varchar(8000),因为。要制作插入器,需要使用varchar(max)变量并附加到它以克服内部8000限制。
答案 1 :(得分:0)
尝试将您的值插入为varchar(max):
INSERT INTO @t VALUES (CAST('0123456789012345678901234567890123456789'
+ '0123456789012345678901234567890123456789'
+ '... and 200 times the previous line' AS varchar(max)
);
此外,您可能必须连接多个< 8000长度字符串(每个字符串都为varchar(max))。
请参阅此MSDN Forum Post。
答案 2 :(得分:0)
当我发布问题时,我确信在INSERT和UPDATE语句中使用的单个字符串文字的长度或最大行宽有一些限制。
这个假设是错误的。
由于SSMS将文本模式下单个列的输出宽度限制为8192个字符并将PRINT语句输出限制为8000个字符,因此引起了这种印象。
事实上,据我所知,你只需要用撇号括起字符串并将所有嵌入的撇号加倍。我发现没有关于字符串宽度或总长度的限制。
对于相反的任务,要将这些字符串从数据库转换回脚本,我找到的最好的工具是ssms toolspack,它适用于SQL-Server 2005 +。