如何在SQL Server管理工具中获取完整的行内容?
如果使用“结果输出到网格”,数据将被编码,因此换行等内容会丢失。如果选择“结果输出到文件”或“结果输出到文本”,则文本仅限制为8192个字符。
注意:我已经有解决方案了,但我在使用SO记录此过程。如果您有更好的答案,请随时发布。
如何在SQL Server管理工具中获取完整的行内容?
如果使用“结果输出到网格”,数据将被编码,因此换行等内容会丢失。如果选择“结果输出到文件”或“结果输出到文本”,则文本仅限制为8192个字符。
注意:我已经有解决方案了,但我在使用SO记录此过程。如果您有更好的答案,请随时发布。
我将其转换为XML格式
select @variable_with_long_text
as [processing-instruction(x)] FOR XML PATH
这里的processing-instruction
是为了防止它将像<
这样的字符实体化为<
只需使用默认的“结果以网格形式显示”,然后右键单击网格结果并选择“另存为...”CSV。
完整内容将保存在文件中,即使有换行符也不会丢失。一些varchar(max)列的内容约为3MB,也能正常保存,不会被截断。
我为SSMS开发了一个插件——“SSMSBoost”,最近添加了“复制单元格内容1:1”的功能(可在网格的上下文菜单中访问)。它会返回单元格中的所有数据,不会进行任何修改和截断。
在更换为SSMS17之前,我从未遇到过这个问题,所以现在在这里写出来。
在SSMS 17中:选择表格,右键选择“修改前#行”,按需要筛选, 然后选择可修改的网格中的单元格:对于长内容,它将显示为空白,按CTRL-A,然后CTRL-C,然后粘贴到任何您想要的地方。
我们公司的一位数据库管理员建议的可能解决方案是将数据放入一个临时变量中,然后在循环中使用打印函数,像这样:
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