将大字段(varbinary(max))复制到文件/剪贴板

时间:2013-02-14 17:13:39

标签: sql-server-2008 tsql ssms

我在数据库表中有一个VARBINARY(MAX)字段,其中包含~35k个字符。这个字段是转换后的Word文档,遗憾的是它不再具有访问权限。

此字段存在于我的开发人员数据库中,我希望将此值移植到实时数据库。但是,如果我纯粹从SQL网格中选择内容结果,我似乎只能获得~28k的可用字符。

所以我的问题是,将具有太大内容的字段迁移到简单复制并粘贴到插入脚本中的最佳方法是什么?

任何想法都非常感激。

编辑:

作为附加信息,将结果输出到文件(尽管是.txt)似乎比通过网格更少的字符。如果我将查询结果导出到运行查询到网格的文件后,我似乎得到了当时查询窗口中的内容的文字表示(因此,如果我拉伸窗口,我获得的字符多于压缩列宽度时的字符数)< / p>

4 个答案:

答案 0 :(得分:24)

要从SSMS查询结果窗格中可靠地复制大字符串,您需要密切关注以下设置(我现在正在查看SSMS 10.50.2500.0):

Tools > Options > Query Results > SQL Server > Results to Grid
    Max chars retreived:
        Non-XML: 65535
        XML: Unlimited

Tools > Options > Query Results > SQL Server > Results to Text
    Max chars displayed:    
        8192

您可能需要至少打开一个新的查询窗口才能应用设置。请注意,由于XML是无限制的,您可以潜在地转换为XML以获得完整的结果。在这种情况下,您可以执行以下操作:

select cast(convert(varchar(max), MyColumn, 1) as xml) -- Use style 1 to get "0x..."

所有这一切都说明,可能有更好的(可自动化/可再现的)方法在您的系统中移动数据,正如其他人所提到的那样:

  • 设置linked server以简单地运行插入语句
  • 使用openrowset查询远程服务器
  • SSMS:导出数据,生成脚本,将结果导出到文件
  • SSIS
  • 第三方工具(Redgate Data Compare等)

答案 1 :(得分:2)

您只需将结果导出(另存为)为csv。

1)在SSMS中运行查询 2)结果以网格格式显示
3)右键单击网格,然后选择“将结果另存为” 4)选择csv或文本文件的格式
5)将结果保存到文件

这种方式将导出所有数据,然后您可以从中选择所需的所有文本。

注意:这些步骤是使用SSMS 2012完成的,但与2008和其他数据库管理工具

应该相同或相似

答案 2 :(得分:2)

我开发的SSMS的SSMSBoost加载项有2个可以帮助您的功能:

  1. 它可以直接从ResultsGrid“可视化”保存在单元格中的文档。因此,您可以通过SSMS直接查看您的文档。链接:http://www.ssmsboost.com/Features/ssms-add-in-results-grid-visualizers-feature

  2. 它可以将所有字节从单元格复制到剪贴板。您可以将数据粘贴到一些“好”文本编辑器中,并将其另存为.doc。但是第一个解决方案更好,只要您直接获得word文档:http://www.ssmsboost.com/Features/ssms-add-in-copy-results-grid-cell-contents-line-with-breaks

答案 3 :(得分:0)

跳过网格
在SSMS查询结果中文件
运行查询

或者你为什么不使用链接服务器直接插入

我测试并保存到文件会截断。

你可以将.NET与DataReader和.GetBinary一起使用吗?