คุณดูข้อความทั้งหมดจาก ntext หรือ nvarchar (สูงสุด) ใน SSMS ได้อย่างไร


193

คุณดูข้อความทั้งหมดจาก NTEXT หรือ NVARCHAR (สูงสุด) ใน SQL Server Management Studio ได้อย่างไร ตามค่าเริ่มต้นดูเหมือนว่าจะส่งคืนอักขระสองสามร้อยตัวแรกเท่านั้น (255?) แต่บางครั้งฉันต้องการวิธีที่รวดเร็วในการดูฟิลด์ทั้งหมดโดยไม่ต้องเขียนโปรแกรมเพื่อทำ แม้แต่ SSMS 2012 ยังมีปัญหานี้ :(


คำตอบ:


91

ตัวเลือก (ผลลัพธ์แบบสอบถาม / เซิร์ฟเวอร์ SQL / ผลลัพธ์ไปยังหน้าตาราง)

หากต้องการเปลี่ยนตัวเลือกสำหรับคิวรีปัจจุบันให้คลิกตัวเลือกคิวรีบนเมนูคิวรีหรือคลิกขวาในหน้าต่าง SQL Server Query และเลือกตัวเลือกคิวรี

...

จำนวนอักขระสูงสุดที่ดึงได้
ป้อนตัวเลขตั้งแต่ 1 ถึง 65535 เพื่อระบุจำนวนอักขระสูงสุดที่จะปรากฏในแต่ละเซลล์

สูงสุดคืออย่างที่คุณเห็น 64k ค่าเริ่มต้นนั้นเล็กกว่ามาก

ผลลัพธ์ BTW เป็นข้อความมีข้อ จำกัด ที่รุนแรงยิ่งกว่าเดิม:

จำนวนอักขระสูงสุดที่ปรากฏในแต่ละคอลัมน์
ค่านี้มีค่าเริ่มต้นที่ 256 เพิ่มค่านี้เพื่อแสดงชุดผลลัพธ์ที่มีขนาดใหญ่ขึ้นโดยไม่ต้องตัดทอน ค่าสูงสุดคือ 8,192


1
ตามที่ Remus เขียนไว้ในคำตอบของเขามีข้อ จำกัด เนื่องจากขนาดพื้นที่เก็บข้อมูลสูงสุดสำหรับชนิดข้อมูลในคอลัมน์ที่กำหนดด้วย MAX คือ 2 GB ดังนั้นจึงต้องมีข้อ จำกัด บางอย่างเนื่องจากจะยุ่งยากในการแสดงข้อมูลทั้งหมดใน SSMS
Ivan G

13
@IvanG - ไม่จริง มันอาจจะเชื่อมโยงหลายมิติในลักษณะเดียวกับ XML และคลิกที่มันจะเปิดในหน้าต่างใหม่ การทำงานรอบปกติผมใช้คือการโยนมันทิ้งเพื่อ XML เป็นที่นี่ ข้อมูล XML สามารถตั้งค่าให้อนุญาตความยาวไม่ จำกัด
Martin Smith

@MartinSmith ที่น่าสนใจดังนั้นจึงเป็นไปได้ที่จะทำให้ SSMS แสดงข้อมูลจำนวนมาก ...
Ivan G

11
ใช้งานได้เฉพาะในกรณีที่จำนวนของอักขระ <65535 ซึ่งสั้นเกิน ntext สูงสุด
Polyfun

1
@IvanG แม้ 'ผลลัพธ์เป็นไฟล์' ได้รับความทุกข์ทรมานจากขีด จำกัด นี้
Iain

217

ฉันสามารถรับข้อความเต็ม (99,208 ตัวอักษร) จากคอลัมน์ NVARCHAR (MAX) โดยเลือก (Results To Grid) เพียงคอลัมน์นั้นจากนั้นคลิกขวาที่มันจากนั้นบันทึกผลลัพธ์เป็นไฟล์ CSV หากต้องการดูผลลัพธ์ให้เปิดไฟล์ CSV ด้วยโปรแกรมแก้ไขข้อความ (ไม่ใช่ Excel) ตลกพอเมื่อฉันพยายามเรียกใช้คิวรีเดียวกัน แต่เมื่อเปิดใช้งาน Results to File เอาต์พุตจะถูกตัดทอนโดยใช้ขีด จำกัด Results to Text

การแก้ไขที่ @MartinSmith อธิบายว่าเป็นความคิดเห็นต่อคำตอบที่ยอมรับ (ปัจจุบัน) ไม่ทำงานสำหรับฉัน (มีข้อผิดพลาดเมื่อพยายามดูผลลัพธ์ XML แบบเต็มบ่นเกี่ยวกับ "ตัวอักษร '[', เลขฐานสิบหก 0x5B ไม่สามารถทำได้ จะรวมอยู่ในชื่อ ")


17
คลิกขวาบันทึกเป็น CSV ทำงานให้ฉันเหมือนมีเสน่ห์เพื่อรับค่าข้อความจำนวนมากจากเขตข้อมูล NTEXT
David Alpert

3
@ajeh: SSMS 2012 เวอร์ชั่นใดที่คุณใช้อยู่ ฉันเพิ่งทดสอบมัน (ทำตามขั้นตอนที่แน่นอนเดียวกันกับที่ฉันอธิบายไว้ในคำตอบของฉัน) กับ SSMS 2012 ของฉัน (รุ่น 11.0.5343.0) และใช้งานได้
Eric

8
แต่อย่าเปิดใน Excel การนำเข้า CSV จะตัดทอนข้อมูลอีกครั้ง :)
Johncl

1
ขอขอบคุณสิ่งนี้ทำให้ฉันสามารถส่งออกข้อมูลข้อความ 7MB จากเขตข้อมูล varchar (สูงสุด) โดยใช้ SSMS 2012
Brian Hasden

2
การบันทึกเป็นข้อความที่คั่นด้วยแท็บจะทำงานได้ดีขึ้น รูปแบบ csv จะเพิ่มราคาเป็นสองเท่าในข้อความ
davidthegrey

140

เคล็ดลับด่วน -

SELECT CAST('<A><![CDATA[' + CAST(LogInfo as nvarchar(max)) + ']]></A>' AS xml)
FROM Logs
WHERE IDLog = 904862629

6
สิ่งนี้ทำงานได้อย่างสมบูรณ์แบบ (ไม่มีส่วน CDATA) เมื่อเนื้อหาของคอลัมน์เป็นจริง XML
axk

2
สิ่งนี้ใช้ได้สำหรับฉันเช่นกันฉันมีข้อมูล json ที่ฉันต้องการเพื่อออกจาก ms sql
Dev_Corps

1
นอกจากนี้เนื้อหายังถูกหลบหนีจาก XML เมื่อคุณนำข้อความออกมาคุณควร unescape โดยใช้เครื่องมือเช่น freeformatter.com
harsimranb

สิ่งนี้ใช้ได้กับฉัน: `` `ภูมิศาสตร์ DECLARE @g; ... เลือก Cast (@ g.ToString () เป็น xml); `` `
Sergei Zinovyev

1
สิ่งนี้ใช้ได้กับฉันด้วย SSMS v18 เพื่อดูสตริง json ขนาด 250kb ซึ่งถูกตัดทอนโดยโซลูชันอื่น นอกจากนี้ฉันชอบเพราะมันให้ลิงก์ไปยังโปรแกรมดูข้อความ +!
Roberto

54

ฉันได้เขียน Add-in สำหรับ SSMS และปัญหานี้ได้รับการแก้ไขแล้ว คุณสามารถใช้วิธีใดวิธีหนึ่งจาก 2 วิธี:

คุณสามารถใช้ "คัดลอกเซลล์ปัจจุบัน 1: 1" เพื่อคัดลอกข้อมูลเซลล์ดั้งเดิมไปยังคลิปบอร์ด:

http://www.ssmsboost.com/Features/ssms-add-in-copy-results-grid-cell-contents-line-with-breaksคัดลอกเนื้อหาของเซลล์ดั้งเดิม

หรืออีกวิธีหนึ่งคุณสามารถเปิดเนื้อหาของเซลล์ในโปรแกรมแก้ไขข้อความภายนอก (notepad ++ หรือ notepad) โดยใช้คุณสมบัติ "Cell visualizers": http://www.ssmsboost.com/Features/ssms-add-in-results-grid-visualizers

(ฟีเจอร์อนุญาตให้เปิดเนื้อหาของฟิลด์ในแอปพลิเคชันภายนอกใด ๆ ดังนั้นหากคุณรู้ว่าเป็นข้อความ - คุณใช้โปรแกรมแก้ไขข้อความเพื่อเปิดหากเนื้อหาเป็นข้อมูลไบนารีพร้อมรูปภาพ - คุณเลือกมุมมองเป็นภาพตัวอย่างด้านล่างแสดงการเปิดรูปภาพ ):โปรแกรมสร้างตารางผลลัพธ์ SSMS


2
ดูเหมือนว่าเป็นส่วนขยายที่มีประโยชน์จริง ๆ แต่ฉันไม่สามารถยอมรับได้ว่าเป็นคำตอบเนื่องจากต้องการผลิตภัณฑ์เชิงพาณิชย์ (หรือทดลองใช้) ขอบคุณนะ!
NickG

4
+1 ส่วนขยายฟรีที่ดีที่ทำงานได้อย่างสมบูรณ์ ... ขอบคุณ!
reSPAWNed

2
ขอบคุณนี่เป็นสิ่งที่ฉันต้องการ
Derreck Dean

9
แต่น่าเสียดายที่ ณ วันที่ 4 กันยายน 2017 SSMS Boost ไม่มีให้บริการฟรีอีกต่อไป (ยกเว้นการทดลองใช้ 30 วันสำหรับเวอร์ชั่นใหม่แต่ละรุ่นที่วางจำหน่าย)
csrowell

4
ตอนนี้เป็นผลิตภัณฑ์เชิงพาณิชย์สิทธิ์การใช้งานฟรีไม่ครอบคลุมคุณสมบัติที่กล่าวถึงพวกเขาถูกปิดใช้งานและคุณจะได้รับป๊อปอัปเพื่อซื้อรุ่น PRO คำตอบเป็นเพียงการส่งเสริมซอฟต์แวร์ของเขา
metabuddy

3

ส่งคืนข้อมูลเป็น XML

SELECT CONVERT(XML, [Data]) AS [Value]
FROM [dbo].[FormData]
WHERE [UID] LIKE '{my-uid}'

ตรวจสอบให้แน่ใจว่าคุณตั้งค่าขีด จำกัด ที่สมเหตุสมผลในหน้าต่างตัวเลือก SSMS ขึ้นอยู่กับผลลัพธ์ที่คุณคาดหวัง ป้อนคำอธิบายรูปภาพที่นี่

นี้จะทำงานถ้าข้อความที่คุณกลับไม่ประกอบด้วยอักขระ unencoded เช่น&แทนการ&amp;ที่จะทำให้เกิดการแปลง XML เพื่อล้มเหลว

ส่งคืนข้อมูลโดยใช้ PowerShell

สำหรับสิ่งนี้คุณจะต้องติดตั้งโมดูล PowerShell SQL Serverบนเครื่องที่คุณใช้งานคำสั่ง

หากคุณพร้อมแล้วให้กำหนดค่าและเรียกใช้สคริปต์ต่อไปนี้:

Invoke-Sqlcmd -Query "SELECT [Data] FROM [dbo].[FormData] WHERE [UID] LIKE '{my-uid}'" -ServerInstance "database-server-name" -Database "database-name" -Username "user" -Password "password" -MaxCharLength 10000000 | Out-File -filePath "C:\db_data.txt"

ตรวจสอบให้แน่ใจว่าคุณตั้งค่า-MaxCharLengthพารามิเตอร์เป็นค่าที่เหมาะสมกับความต้องการของคุณ


1

ทางเลือกที่ 1 : คลิกขวาเพื่อคัดลอกเซลล์และวางลงในตัวแก้ไขข้อความ (หวังว่าจะรองรับ utf-8)

ทางเลือกที่ 2 : คลิกขวาและส่งออกเป็นไฟล์ CSV

ทางเลือกที่ 3 : ใช้ฟังก์ชัน SUBSTRING เพื่อแสดงภาพส่วนต่างๆของคอลัมน์ ตัวอย่าง:

SELECT SUBSTRING (fileXml, 2200,200) จาก mytable WHERE id = 123456


0

หากคุณเพียงแค่ต้องดูฉันได้ใช้สิ่งนี้:

print cast(dbo.f_functiondeliveringbigformattedtext(seed) as text)

ผลลัพธ์ที่ได้คือฉันได้รับการป้อนบรรทัดและเนื้อหาทั้งหมดในหน้าต่างข้อความของ SMSS แน่นอนว่ามันอนุญาตสำหรับเซลล์เดียวเท่านั้น - หากคุณต้องการทำเซลล์เดียวจากจำนวนแถวคุณสามารถทำได้ดังนี้

declare @T varchar(max)=''
select @T=@T
       + isnull(dbo.f_functiondeliveringbigformattedtext(x.a),'NOTHINGFOUND!')
       + replicate(char(13),4)
from x -- table containing multiple rows and a value in column a
print @T

ฉันใช้สิ่งนี้เพื่อตรวจสอบความถูกต้องของสตริง JSON ที่สร้างโดยรหัส SQL อ่านยากเกินไป!


-1

วิธีที่ง่ายที่สุดในการดูคอลัมน์ varchar / text ขนาดใหญ่อย่างรวดเร็ว:

declare @t varchar(max)

select @t = long_column from table

print @t

11
แต่ข้อความก็ยังถูกตัดทอน :-(
Rasmus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.