Ash*_*ine 48 sql-server truncation
在SQL Server 2005中,我试图查询varchar(MAX)列,其中包含一些文本数据超过8192的行.但是,在管理工作室中,我有工具 - >选项 - >查询结果 - >结果到文本 - >每列中显示的最大字符数= 8192,这是最大值.因此,看起来这些行的截断仅仅是由于文本输出所施加的限制.
我唯一能看到的就是使用SUBSTRING函数来获取前8000个字符,然后是接下来的8000个字符等等.但这很丑陋且容易出错.
我应该提一下,SSIS和BCP不是我的选择.
有人有更好的建议吗?谢谢!
Tor*_*ley 68
您可以将数据导出到不会被截断的平面文件中.去做这个:
其余步骤应该是自我解释的.这会将文件输出到文本,您可以在您喜欢的文本编辑器中打开它.
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 次!
在查询窗口,
你会得到所有你想在文件中看到的文本!!!对于 varchar(MAX) 字段的结果,我可以看到 130,556 个字符
我的解决方案有点绕圈,但让我到达那里(只要输出少于65535个字符):
更新:为了证明这是可行的,下面是一些选择单个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)
笔记:
我尝试导出XML。这是我使用的解决方案:
选择“结果网格化”选项,右键单击“结果”窗格中显示的链接,然后选择“将结果另存为”,选择“所有文件”文件类型,为文件命名,然后单击“保存”。所有xml数据均正确保存到文件中。
我正在使用SSMS 10,但无法使用Torre的解决方案。导出向导一直认为输入列是图像:
“输入列“ XML_F52E2B61-18A1-11d1-B105-00805F49916B”(26)”的数据类型为DT_IMAGE
| 归档时间: |
|
| 查看次数: |
52943 次 |
| 最近记录: |