SQL Server截断和8192限制

Ash*_*ine 48 sql-server truncation

在SQL Server 2005中,我试图查询varchar(MAX)列,其中包含一些文本数据超过8192的行.但是,在管理工作室中,我有工具 - >选项 - >查询结果 - >结果到文本 - >每列中显示的最大字符数= 8192,这是最大值.因此,看起来这些行的截断仅仅是由于文本输出所施加的限制.

我唯一能看到的就是使用SUBSTRING函数来获取前8000个字符,然后是接下来的8000个字符等等.但这很丑陋且容易出错.

我应该提一下,SSIS和BCP不是我的选择.

有人有更好的建议吗?谢谢!

Tor*_*ley 68

您可以将数据导出到不会被截断的平面文件中.去做这个:

  1. 右键单击数据库
  2. 单击任务 - >导出数据
  3. 选择您的数据源(默认值应该没问题)
  4. 为目标类型选择"平面文件目标".
  5. 选择输出的文件名.
  6. 在"指定表复制或查询"上,选择"编写查询以指定要传输的数据"
  7. 粘贴在您的查询中

其余步骤应该是自我解释的.这会将文件输出到文本,您可以在您喜欢的文本编辑器中打开它.

  • 没有为我工作。仍在截断。还有其他我可能错过的关键步骤(自我说明)吗? (2认同)

Mar*_*ith 28

我也使用XML,但稍微不同的方法可以解决XML入侵的大部分​​问题.

declare @VeryLongText nvarchar(max) = '';

SELECT top 100 @VeryLongText = @VeryLongText + '

' + OBJECT_DEFINITION(object_id) 
FROM sys.all_objects 
WHERE type='P' and is_ms_shipped=1

SELECT LEN(@VeryLongText)

SELECT @VeryLongText AS [processing-instruction(x)] FOR XML PATH('')

PRINT @VeryLongText /*WILL be truncated*/
Run Code Online (Sandbox Code Playgroud)

确保SSMS中的"XML数据"限制设置得足够高!

截图

  • 显然是最好的解决方案. (2认同)

Jen*_*eaf 9

您是否尝试过这个简单的解决方案?只需点击 2 次!

在查询窗口,

  1. 将查询选项设置为“结果到网格”,运行您的查询
  2. 右键单击网格角的结果选项卡,将结果另存为任何文件

你会得到所有你想在文件中看到的文本!!!对于 varchar(MAX) 字段的结果,我可以看到 130,556 个字符

只需点击两下!


Luk*_*son 6

我的解决方案有点绕圈,但让我到达那里(只要输出少于65535个字符)

  1. 在SQL Management Studio中,将网格结果的限制设置为65535(工具>选项>查询结果> SQL Server>网格结果>非XML数据)
  2. 运行查询,输出到网格
  3. 右键单击结果,选择“将结果另存为...”,然后将结果保存到文件中
  4. 在记事本或类似文件中打开文件以获取输出

更新:为了证明这是可行的,下面是一些选择单个100,000个字符列的SQL。如果我将网格输出保存到一个csv文件中,那么所有100,000个字符都不会被截断。

DECLARE @test nvarchar(MAX), @i int, @line nvarchar(100)
SET @test = ''; SET @i = 100
WHILE @i < 100000
BEGIN
    SET @test = @test + STUFF(REPLICATE('_', 98) + CHAR(13) + CHAR(10), 1, LEN(CAST(@i AS nvarchar)), CAST(@i AS nvarchar))
    SET @i = @i + 100
END
SELECT @test
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. 正如我原本以为的那样,字符长度设置似乎没有什么区别。
  2. 我正在使用SQL 2008 R2(服务器和Management Studio)
  3. 如果将长列存储在局部变量中(如本例中所示)或从实际表中选择,似乎没有什么不同

  • 这行不通。文件仍然具有截断的数据。 (2认同)
  • 仍被截断。 (2认同)

Cin*_*way 5

我尝试导出XML。这是我使用的解决方案:

选择“结果网格化”选项,右键单击“结果”窗格中显示的链接,然后选择“将结果另存为”,选择“所有文件”文件类型,为文件命名,然后单击“保存”。所有xml数据均正确保存到文件中。

我正在使用SSMS 10,但无法使用Torre的解决方案。导出向导一直认为输入列是图像:

“输入列“ XML_F52E2B61-18A1-11d1-B105-00805F49916B”(26)”的数据类型为DT_IMAGE