2

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 ローカルの値が '(table)' であることを示していますが、そのテーブルを構成する行を実際に表示できるツールは見つかりませんでした。

4

4 に答える 4

2

デバッガーから喜びを得られないので、ここに私の提案があります。入力変数を追加して、テスト モードかどうかを判断します。次に、テストモードの場合は、sp の上部で選択を実行して、データが何であるかを確認します。

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;  
于 2010-06-09T19:23:33.680 に答える
1

あなたが説明したことと同じことをしようとしても成功しませんでした。なので、まだ無理だと思います。SSMS 2010 を待ちます

于 2010-06-09T10:11:21.547 に答える
1

テーブル変数ではできませんが、別のデータベース接続から一時テーブルの内容を表示する手順を作成しました。(これは通常のクエリでは不可能です)。& デフォルトのトレースを使用DBCC PAGEしてデータにアクセスするので、デバッグ目的でのみ使用してください。

コードにブレークポイントを置き、2 番目の接続を開き、次を呼び出すことで使用できます。

exec sp_select 'tempdb..#mytable'

于 2011-08-01T09:31:28.733 に答える
0

別のストアド プロシージャを作成し、テーブル値パラメータを入力してメイン プロシージャを呼び出し、作成したテスト プロシージャからデバッグを開始できると思われる解決策があります。

于 2011-10-07T07:34:14.683 に答える