如何在SQL Server Management Studio中获取行的完整内容?
如果使用“结果到网格”,数据会被编码,因此会丢失换行符等内容。如果您执行“结果到文件”或“结果到文本”,则文本限制为8192个字符。
注意:我有解决方案,但我使用SO来记录这个。如果您有更好的答案,请随时发布。
答案 0 :(得分:41)
我将其转换为XML
select @variable_with_long_text
as [processing-instruction(x)] FOR XML PATH
processing-instruction
位可以阻止它将<
等字符授权给<
答案 1 :(得分:5)
我为SSMS开发了一个加载项 - “SSMSBoost”,并且最近添加了“复制单元格内容1:1”功能(可在Grid的上下文菜单中访问)。它会返回来自单元格的所有数据而不进行任何修改而不会截断。
答案 2 :(得分:3)
只需使用默认的“结果到网格”,然后右键单击网格结果并选择“将结果另存为...”CSV。
即使有换行符,完整内容也会保存在文件中。一些varchar(max)列的内容大约为3MB,保存好,不会被截断。
答案 3 :(得分:2)
我在改用SSMS17之前从未遇到过这个问题,所以我现在在这里写。
在SSMS 17中:选择表格,右键单击并选择“修改前#行”,根据需要进行过滤, 然后在可修改的网格中选择单元格:对于长内容,该单元格将显示为空白,按CTRL-A,然后按CTRL-C,再按任意键。
答案 4 :(得分:0)
我公司的一位DBA建议一个可能的解决方案是将数据放在一个临时变量中,然后在循环中使用print函数,如下所示:
DECLARE @contents varchar(MAX)
SET @contents = ''
SELECT @contents = @contents + Contents + CHAR(13)
FROM dbo.tFOO
WHERE someConition
DECLARE @tContents TABLE (id int IDENTITY, contents varchar(MAX))
WHILE @contents LIKE '%' + CHAR(13) + '%'
BEGIN
PRINT SUBSTRING(@contents, 0, CHARINDEX(CHAR(13), @contents))
SET @contents = SUBSTRING(@contents, CHARINDEX(CHAR(13), @contents)+1, LEN(@contents) - CHARINDEX(CHAR(13), @contents))
END