【发布时间】:2012-01-19 16:55:53
【问题描述】:
如何取回 SQL Server Management Studio 中行的全部内容?
如果您使用“结果到网格”,则数据会被编码,因此会丢失换行符之类的内容。如果您执行“结果到文件”或“结果到文本”,则文本限制为 8192 个字符。
注意:我有解决方案,但我正在使用 SO 来记录这一点。如果您有更好的答案,请随时发布。
【问题讨论】:
标签: sql sql-server
如何取回 SQL Server Management Studio 中行的全部内容?
如果您使用“结果到网格”,则数据会被编码,因此会丢失换行符之类的内容。如果您执行“结果到文件”或“结果到文本”,则文本限制为 8192 个字符。
注意:我有解决方案,但我正在使用 SO 来记录这一点。如果您有更好的答案,请随时发布。
【问题讨论】:
标签: sql sql-server
我将它转换为 XML
select @variable_with_long_text
as [processing-instruction(x)] FOR XML PATH
processing-instruction 位用于阻止它将< 到< 等字符实体化
【讨论】:
只需使用默认的“结果到网格,然后右键单击网格结果并选择“将结果另存为...”CSV。
完整的内容将保存在文件中,即使有换行符。一些 varchar(max) 列的内容大约为 3MB,并且保存正常,没有被截断。
【讨论】:
我为 SSMS 开发了一个插件 - “SSMSBoost”,并且最近添加了“1:1 复制单元格内容”功能(可在 Grid 的上下文菜单中访问)。它将返回单元格中的所有数据,无需任何修改且不会截断。
【讨论】:
在换SSMS17之前我从来没有遇到过这个问题,所以我现在写到这里。
在 SSMS 17 中:选择表,右键单击并选择“修改前 # 行”,根据需要进行过滤, 然后选择可修改网格中的单元格:对于长内容,它将显示为空白,按 CTRL-A,然后按 CTRL-C,然后在任何你想要的地方过去。
【讨论】:
我公司的一位 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
【讨论】: