17

我在数据库表中有一个 VARBINARY(MAX) 字段,其中包含约 35k 个字符。该字段是一个转换后的 word 文档,遗憾的是无法再访问。

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

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

任何想法都非常感谢。

编辑:

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

4

4 回答 4

30

要从 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..."

总而言之,正如其他人所提到的,可能有更好的(和可自动化/可重现的)方法来在您的系统中移动数据:

  • 设置链接服务器以简单地运行插入语句
  • 使用openrowset查询远程服务器
  • SSMS:导出数据、生成脚本、结果到文件
  • SSIS
  • 3rd 方工具(Redgate 数据比较等)
于 2013-02-14T18:17:23.793 回答
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

于 2013-02-15T09:54:57.740 回答
1

您可以简单地将结果导出(另存为)到 csv。

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

这种方式将导出所有数据,从那里你可以选择你想要的所有文本。

注意:这些步骤是使用 SSMS 2012 完成的,但对于 2008 和其他数据库管理工具应该相同或相似

于 2013-02-14T17:18:28.513 回答
0


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

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

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

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

于 2013-02-14T18:05:41.037 回答