1

有誰知道是否有可能使用Visual Studio/SQL Server Management Studio調試器來檢查傳遞給存儲過程的表值參數的內容?是否可以通過調試器檢查表值參數的內容?

舉一個簡單的例子:

CREATE TYPE [dbo].[ControllerId] AS TABLE(
    [id] [nvarchar](max) NOT NULL 
) 
GO 

CREATE PROCEDURE [dbo].[test] 
    @controllerData [dbo].[ControllerId] READONLY 
AS 
BEGIN 
    SELECT COUNT(*) FROM @controllerData; 
END 

DECLARE @SampleData as [dbo].[ControllerId]; 
INSERT INTO @SampleData ([id]) VALUES ('test'), ('test2'); 

exec [dbo].[test] @SampleData; 

使用上面的exec語句一個破發點,我能夠步入存儲過程沒有任何麻煩。調試器顯示@controllerData local的值爲'(table)',但我還沒有找到任何工具可以讓我實際查看組成該表的行。

回答

1

既然你沒有從調試器的喜悅,這是我的建議。您可以添加一個可變輸入來確定它是否處於測試模式。然後,如果它處於測試模式,請運行sp頂部的select以查看數據是什麼。

CREATE TYPE [dbo].[ControllerId] AS TABLE( 
    [id] [nvarchar](max) NOT NULL 
) 
GO 

CREATE PROCEDURE [dbo].[jjtest] 
    (@controllerData [dbo].[ControllerId] READONLY 
    , @test bit = null) 
AS 
IF @test = 1 
BEGIN 
SELECT * FROM @controllerData 
END 
BEGIN 
    SELECT COUNT(*) FROM @controllerData; 
END 
GO 

DECLARE @SampleData as [dbo].[ControllerId]; 
INSERT INTO @SampleData ([id]) VALUES ('test'), ('test2'); 

EXEC [dbo].[jjtest] @SampleData, 1; 
+0

似乎在SQL Server Management Studio中運行良好 - 肯定比根本不知道表值參數中有什麼更好。 儘管如此,如果您通過C#腳本調試存儲過程,這並不是很好。你的代碼將不得不從實際輸出分離調試輸出。如果發生異常,它也將在C#中崩潰 - 就我所見,無法通過C#獲取任何結果的異常。 – 2010-06-10 08:16:29

1

我沒有成功,試圖做同樣的描述。所以我猜這是不可能的。將等待SSMS 2010

1

這是不可能的表變量,但我建立a procedure這將顯示一個臨時表從另一個數據庫連接的內容。 (這對普通查詢是不可能的)。 請注意,它使用DBCC PAGE &默認跟蹤來訪問數據,所以只用於調試目的。

你可以把你的代碼中設置斷點,打開第二個連接,並要求使用它:

exec sp_select 'tempdb..#mytable'

0

有一個解決方案,我想你可以創建另一個存儲過程,並填補了表值參數並調用你的主程序,然後你開始從你所做的測試過程中進行調試。

相關問題