Làm cách nào để xem các giá trị của biến bảng trong thời gian gỡ lỗi trong T-SQL?


187

Chúng ta có thể thấy các giá trị (hàng và ô) trong một biến có giá trị bảng trong SQL Server Management Studio (SSMS) trong thời gian gỡ lỗi không? Nếu có, làm thế nào?

nhập mô tả hình ảnh ở đây

Câu trả lời:


31

Điều đó chưa được triển khai theo liên kết Microsoft Connect này : Microsoft Connect



2
Và chúng ta ở đây vào năm 2016. Không tốt hơn. Liên kết Connect cũng không hoạt động nữa.
dotNET

5
Thành thật mà nói đây không thực sự là một câu trả lời vì nó không trả lời câu hỏi, câu hỏi là làm thế nào để làm điều đó (không phải SSMS có tính năng nào cho nó không), nói rằng điều này không được thực hiện trong khi có nhiều cách để hiển thị các giá trị không rất hữu ích
Gấu trúc Răzvan Flavius

1
Hãy xóa câu trả lời này. Câu trả lời dưới đây nên là câu trả lời được chấp nhận.
Vortex852456

2018, vẫn chưa có.
AgentFire

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

Chèn câu lệnh trên vào điểm bạn muốn xem nội dung của bảng. Nội dung của bảng sẽ được hiển thị dưới dạng XML trong cửa sổ cục bộ hoặc bạn có thể thêm @vvào cửa sổ đồng hồ.

nhập mô tả hình ảnh ở đây


1
Đây chắc chắn là một công việc xung quanh đủ tốt để các bảng nhỏ được trình bày dưới dạng XML.
Faiz

4
Nhưng vẫn không ngừng đọc! Một lựa chọn tuyệt vời dưới đây! Chủ đề tuyệt vời !!
Mike M

1
Tôi đã có các bảng lớn với XML không thân thiện để đọc. Tôi thực hiện một bước khác - sao chép XML và dán vào xmlgrid.net và bạn có thể xem XML dưới dạng bảng. Bảng trực quan thực sự có ích. Chờ đợi bản phát hành SSMS có trình xem bảng như trình xem có thể truy cập được trong Visual Studio.
Moiz Tankiwala

1
Bạn có thể thêm ", ROOT ('rootNodeName')" vào mệnh đề "FOR XML". Điều này sẽ thu thập nhiều hàng (nếu có) trong một gốc, tạo ra một tài liệu XML hợp pháp, có thể được xem bằng trình hiển thị XML thay vì trình hiển thị văn bản.
JohnL4

2
Sử dụng SQL Server 2016 hoặc không bao giờ bạn cũng có thể sử dụng phiên bản JSON của điều này DECLARE @v nvarchar(max) = (SELECT * FROM <tablename> FOR JSON AUTO)
Sousuke

18

Dự án này https://github.com/FilipDeVos/sp_select có một thủ tục được lưu trữsp_select cho phép chọn từ bảng tạm thời.

Sử dụng:

exec sp_select 'tempDb..#myTempTable'

Trong khi gỡ lỗi một thủ tục được lưu trữ, bạn có thể mở một tab mới và chạy lệnh này để xem nội dung của bảng tạm thời.


6
Tuyệt vời cho các bảng tạm thời, nhưng không phải cho các biến bảng
Harag

Cũng bị treo nếu có một giao dịch mở, vì vậy không sử dụng nhiều nếu sử dụng gỡ lỗi một thử nghiệm trong một khung như tQueryt luôn mở một giao dịch khi bắt đầu thử nghiệm.
Nathan

1
WOW WOW WOW WOW
vothaison 26/07/18

Tốt - sẽ rất tuyệt nếu bạn có thể sắp xếp theo một hoặc hai cột
user2486488

6

Trong Quy trình được lưu trữ, hãy tạo một bảng tạm thời toàn cầu ## cám dỗ và viết một truy vấn chèn trong quy trình được lưu trữ của bạn để chèn dữ liệu trong bảng của bạn vào bảng tạm thời này.

Khi điều này được thực hiện, bạn có thể kiểm tra nội dung của bảng tạm thời bằng cách mở một cửa sổ truy vấn mới. Chỉ cần sử dụng "select * từ ## cám dỗ"


1

Chỉ cần sử dụng truy vấn chọn để hiển thị bảng biến thiên, nơi bạn muốn kiểm tra.

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


Có đồng ý lựa chọn tốt nhất và nhanh nhất. Chỉ cần làm điều này và làm nổi bật và chỉ thực hiện SQL mà bạn muốn chạy nếu bạn cần kiểm soát nhiều hơn.
Jammin

2
Sử dụng chọn truy vấn ở đâu, trong cửa sổ xem?
Faiz

sử dụng lựa chọn bên trong thủ tục hoặc bất kỳ truy vấn adhoc nào mà bạn đang thực hiện
solairaja

Nhưng cái tôi cần kiểm tra là một hàm có giá trị bảng và nó sẽ báo lỗi "Chọn các câu lệnh có trong hàm không thể trả lại dữ liệu cho máy khách". Có cách nào khác, đặc biệt để kiểm tra thông qua các công cụ gỡ lỗi được cung cấp không?
Faiz

3
Không, điều đó không giải quyết được câu hỏi. Tôi nghĩ rằng điều này là không thể nếu không có bất kỳ bổ sung nào.
Faiz

1

Nếu bạn đang sử dụng SQL Server 2016 hoặc mới hơn, bạn cũng có thể chọn nó làm kết quả JSON và hiển thị nó trong JSON Visualizer, việc đọc nó dễ dàng hơn nhiều so với trong XML và cho phép bạn lọc kết quả.

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

nhập mô tả hình ảnh ở đây


0

Tôi đã đi đến kết luận rằng điều này là không thể nếu không có bất kỳ plugin nào.


Tôi đã xem một số bản xem trước của Visual Studio 2010. Rất lạ mắt, phức tạp và chi tiết ... và người trình diễn không biết liệu các bảng tạm thời có thể được xem trong chế độ gỡ lỗi hay không. Có lẽ khi nó được phát hành, nhưng tôi không nín thở.
Philip Kelley

0

SQL Server Profiler 2014 liệt kê nội dung của tham số giá trị bảng. Có thể làm việc trong các phiên bản trước quá. Bật SP: Bắt đầu hoặc RPC: Sự kiện đã hoàn thành trong nhóm Thủ tục được lưu trữ và cột TextData và khi bạn nhấp vào mục trong nhật ký, bạn sẽ có các câu lệnh chèn cho biến bảng. Sau đó, bạn có thể sao chép văn bản và chạy trong Management Studio.

Đầu ra mẫu:

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

Tại sao không chỉ chọn Bảng và xem biến theo cách đó?

SELECT * FROM @d

4
Hãy giải thích làm thế nào để đi về điều đó. Thêm một SELECT * FROM @Tabletập lệnh đang được sửa lỗi sẽ không phát ra kết quả vào cửa sổ kết quả.
StingyJack

-3

Xin lỗi các bạn, tôi đến bữa tiệc muộn một chút nhưng với bất kỳ ai tình cờ gặp câu hỏi này vào một ngày sau đó, tôi đã tìm thấy cách dễ nhất để làm điều này trong một thủ tục được lưu trữ là:

  1. Tạo một truy vấn mới với bất kỳ tham số thủ tục nào được khai báo và khởi tạo ở trên cùng.
  2. Dán trong cơ thể của thủ tục của bạn.
  3. Thêm một truy vấn chọn kiểu cũ tốt ngay sau khi biến bảng của bạn được khởi tạo với dữ liệu.
  4. Nếu 3. không phải là câu lệnh cuối cùng trong quy trình, hãy đặt điểm dừng trên cùng một dòng, bắt đầu gỡ lỗi và tiếp tục đi thẳng đến điểm dừng của bạn.
  5. Lợi nhuận!!

Câu trả lời của messi19 phải là một IMHO được chấp nhận, vì nó đơn giản hơn tôi và thực hiện công việc hầu hết thời gian, nhưng nếu bạn giống tôi và có một biến bảng trong vòng lặp mà bạn muốn kiểm tra, thì công việc này rất tốt mà không cần quá nhiều nỗ lực hoặc các plugin SSMS bên ngoài.


Điều này hoàn toàn trái ngược với những gì OP đang cố gắng làm.
Jamie Marshall
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.