วิธีดูค่าของตัวแปรตาราง ณ เวลาดีบักใน T-SQL


187

เราสามารถดูค่า (แถวและเซลล์) ในตัวแปรที่มีค่าเป็นตารางใน SQL Server Management Studio (SSMS) ในช่วงเวลาดีบั๊กหรือไม่ ถ้าใช่เป็นอย่างไร

ป้อนคำอธิบายรูปภาพที่นี่

คำตอบ:


31

ยังไม่ได้ใช้งานตามลิงก์ Microsoft Connect นี้: Microsoft Connect



2
และที่นี่เราอยู่ในปี 2559 ไม่ดีกว่า ลิงก์ Connect ไม่ทำงานอีกต่อไป
dotNET

5
ความจริงแล้วนี่ไม่ใช่คำตอบจริงๆเพราะมันไม่ได้ตอบคำถามคำถามคือทำอย่างไร (ไม่ใช่ว่า SSMS มีคุณสมบัติใด ๆ หรือไม่) โดยระบุว่าสิ่งนี้ไม่ได้ถูกนำไปใช้ในขณะที่มีวิธีการแสดงค่าไม่ใช่ มีประโยชน์มาก
Răzvan Flavius ​​Panda

1
โปรดลบคำตอบนี้ คำตอบด้านล่างนี้ควรเป็นคำตอบที่ยอมรับได้
Vortex852456

2561 ยังคงไม่
AgentFire

317
DECLARE @v XML = (SELECT * FROM <tablename> FOR XML AUTO)

แทรกคำสั่งด้านบนตรงจุดที่คุณต้องการดูเนื้อหาของตาราง เนื้อหาของตารางจะแสดงเป็น XML ในหน้าต่างท้องถิ่นหรือคุณสามารถเพิ่มลง@vในหน้าต่างเฝ้าดู

ป้อนคำอธิบายรูปภาพที่นี่


1
นี่เป็นการทำงานที่ดีพอสำหรับตารางเล็ก ๆ ที่จะแสดงเป็น XML
Faiz

4
แต่ก็ยังไม่หยุดอ่าน! อีกตัวเลือกที่ยอดเยี่ยมด้านล่าง! เยี่ยมมาก !!
Mike M

1
ฉันมีตารางขนาดใหญ่ที่มี XML ไม่ค่อยอ่านง่าย ฉันใช้ขั้นตอนอื่น - คัดลอก XML และวางในxmlgrid.netและคุณสามารถดู XML เป็นตารางได้ การสร้างภาพตารางช่วยได้จริงๆ กำลังรอการเปิดตัว SSMS ที่มีตัวแสดงตารางเช่นตัวแสดงข้อมูลที่สามารถเข้าถึงได้ใน Visual Studio
Moiz Tankiwala

1
คุณสามารถเพิ่ม ", ROOT ('rootNodeName')" ในส่วน "FOR XML" สิ่งนี้จะรวบรวมหลายแถว (ถ้ามี) ภายใต้รูทเดียวซึ่งสร้างขึ้นสำหรับเอกสาร XML ที่ถูกกฎหมายซึ่งสามารถดูได้ด้วย XML visualizer แทนที่จะเป็น text visualizer
JohnL4

2
ใช้ SQL Server 2016 หรือไม่คุณสามารถใช้รุ่น JSON นี้ได้ DECLARE @v nvarchar(max) = (SELECT * FROM <tablename> FOR JSON AUTO)
Sousuke

18

โครงการนี้https://github.com/FilipDeVos/sp_selectมีขั้นตอนการจัดเก็บsp_selectที่อนุญาตให้เลือกจากตารางชั่วคราว

การใช้งาน:

exec sp_select 'tempDb..#myTempTable'

ในขณะที่การดีบักกระบวนการที่เก็บไว้คุณสามารถเปิดแท็บใหม่และเรียกใช้คำสั่งนี้เพื่อดูเนื้อหาของตาราง temp


6
เหมาะสำหรับตารางชั่วคราว แต่ไม่ใช่สำหรับตัวแปรตาราง
Harag

ยังแฮงค์ถ้ามีธุรกรรมเปิดดังนั้นไม่ค่อยใช้ถ้าใช้ debugging การทดสอบในเฟรมเวิร์กเช่น tSQLt ซึ่งจะเปิดธุรกรรมเสมอเมื่อเริ่มการทดสอบ
นาธา

1
WOW WOW WOW
vothaison

ดี - จะดีมากหากคุณสามารถจัดเรียงตามคอลัมน์เดียวหรือสองรายการ
user2486488

6

ในกระบวนงานที่เก็บไว้สร้างตารางชั่วคราวส่วนกลาง ## ล่อลวงและเขียนแบบสอบถามแทรกภายในกระบวนงานที่เก็บไว้ซึ่งแทรกข้อมูลในตารางของคุณลงในตารางชั่วคราวนี้

เมื่อเสร็จแล้วคุณสามารถตรวจสอบเนื้อหาของตารางชั่วคราวโดยเปิดหน้าต่างแบบสอบถามใหม่ เพียงใช้ "select * จาก ## ล่อลวง"


1

เพียงใช้แบบสอบถามแบบใช้เลือกข้อมูลเพื่อแสดง varialble ของตารางที่คุณต้องการตรวจสอบ

http://www.simple-talk.com/sql/learn-sql-server/management-studio-improvements-in-sql-server-2008/


ใช่ตกลงตัวเลือกที่ดีที่สุดและเร็วที่สุด เพียงแค่ทำสิ่งนี้และไฮไลต์และรันเฉพาะ SQL ที่คุณต้องการเรียกใช้ถ้าคุณต้องการการควบคุมเพิ่มเติม
Jammin

2
ใช้แบบสอบถามแบบใช้เลือกข้อมูลที่ไหนในหน้าต่างดู?
Faiz

ใช้ตัวเลือกภายในโพรซีเดอร์หรือเคียวรี adhoc ใด ๆ ที่คุณเรียกใช้งานอยู่
solairaja

แต่สิ่งที่ฉันต้องการทดสอบก็คือฟังก์ชั่นที่มีค่าของตารางและมีข้อผิดพลาด "เลือกคำสั่งที่รวมอยู่ในฟังก์ชั่นที่ไม่สามารถส่งคืนข้อมูลไปยังลูกค้าได้" มีวิธีอื่นโดยเฉพาะอย่างยิ่งในการตรวจสอบผ่านเครื่องมือดีบั๊กหรือไม่?
Faiz

3
ไม่ใช่นั่นไม่ได้แก้คำถาม ฉันคิดว่ามันเป็นไปไม่ได้หากไม่มีปลั๊กอินเสริม
Faiz

1

หากคุณใช้ SQL Server 2016 หรือใหม่กว่าคุณสามารถเลือกเป็นผลลัพธ์ JSON และแสดงใน JSON Visualizer ได้ง่ายกว่าอ่านใน XML และให้คุณกรองผลลัพธ์

DECLARE @v nvarchar(max) = (SELECT * FROM Suppliers FOR JSON AUTO)

ป้อนคำอธิบายรูปภาพที่นี่


0

ฉันได้ข้อสรุปว่าสิ่งนี้เป็นไปไม่ได้หากไม่มีปลั๊กอินใด ๆ


ฉันเห็นตัวอย่างของ Visual Studio 2010 แฟนซีซับซ้อนและละเอียดมาก ... และผู้สาธิตไม่ทราบว่าสามารถดูตาราง temp ในโหมดดีบักได้หรือไม่ อาจจะเป็นเมื่อมันถูกปล่อยออกมา แต่ฉันไม่ได้กลั้นหายใจ
Philip Kelley

0

SQL Server Profiler 2014 แสดงเนื้อหาของพารามิเตอร์ค่าของตาราง อาจทำงานในรุ่นก่อนหน้าเช่นกัน เปิดใช้งาน SP: การเริ่มต้นหรือ RPC: เหตุการณ์ที่เสร็จสมบูรณ์ในกลุ่มกระบวนงานที่เก็บไว้และคอลัมน์ TextData และเมื่อคุณคลิกที่รายการในบันทึกคุณจะมีคำสั่งแทรกสำหรับตัวแปรตาราง จากนั้นคุณสามารถคัดลอกข้อความและเรียกใช้ใน Management Studio

ตัวอย่างผลลัพธ์:

declare @p1 dbo.TableType
insert into @p1 values(N'A',N'B')
insert into @p1 values(N'C',N'D')

exec uspWhatever @PARAM=@p1

-1

ทำไมไม่เลือกตารางและดูตัวแปรแบบนั้น?

SELECT * FROM @d

4
โปรดอธิบายวิธีการเกี่ยวกับเรื่องนั้น การเพิ่มSELECT * FROM @Tableสคริปต์ที่กำลังดีบั๊กจะไม่ส่งผลลัพธ์ไปที่หน้าต่างผลลัพธ์
StingyJack

-3

ขอโทษนะฉันมาสายนิดหน่อยสำหรับงานปาร์ตี้ แต่สำหรับใครก็ตามที่สะดุดกับคำถามนี้ในภายหลังฉันพบวิธีที่ง่ายที่สุดในการจัดเก็บคือ:

  1. สร้างแบบสอบถามใหม่ด้วยพารามิเตอร์กระบวนการใด ๆ ที่ประกาศและเริ่มต้นที่ด้านบน
  2. วางในเนื้อความของขั้นตอนของคุณ
  3. เพิ่มแบบสอบถามแบบใช้เลือกข้อมูลแบบเก่าที่ดีทันทีหลังจากตัวแปรตารางของคุณเริ่มต้นด้วยข้อมูล
  4. หาก 3. ไม่ใช่คำสั่งสุดท้ายในโพรซีเดอร์ให้ตั้งค่าเบรกพอยต์บนบรรทัดเดียวกันเริ่มการดีบักและดำเนินการตรงไปยังเบรกพอยต์ของคุณ
  5. กำไร!!

คำตอบของ messi19 ควรเป็นที่ยอมรับ IMHO หนึ่งเนื่องจากมันง่ายกว่าของฉันและทำงานเป็นส่วนใหญ่แต่ถ้าคุณชอบฉันและมีตัวแปรตารางภายในวงที่คุณต้องการตรวจสอบนี่ทำงานได้ดี โดยไม่ต้องใช้ความพยายามมากเกินไปหรือปลั๊กอิน SSMS ภายนอก


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