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; 

간부 문에 중단 점과 위의를 사용하여, 나는 어떤 문제없이 저장 프로 시저로 단계 수 있어요. 디버거는 @controllerData 로컬에 '(table)'값이 있음을 보여 주지만 그 테이블을 구성하는 행을 실제로 볼 수있는 도구를 찾지 못했습니다.

답변

1

디버거에서 아무런 기쁨도 얻지 못하므로 여기에 제 제안이 있습니다. 테스트 모드에 있는지 여부를 결정하기 위해 입력 값을 추가합니다. 그런 다음 testmode에 있으면 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#을 통해 결과를 얻을 수있는 방법은 없습니다. –

1

나는 당신이 설명한 것과 똑같은 것을 시도하는 데 성공하지 못했습니다. 그래서 아직 가능하지 않다고 생각합니다. SSMS 2010을 기다릴 것입니다

1

그것은 테이블 변수 수 없습니다,하지만 난 다른 데이터베이스 연결에서 임시 테이블의 내용을 표시합니다 a procedure을 만들었습니다. (일반적인 쿼리에서는 불가능합니다). DBCC PAGE & 기본 추적을 사용하여 데이터에 액세스하므로 디버깅 용도로만 사용하십시오.

당신은 당신의 코드에 중단 점을 넣어 두 번째 연결을 열고 호출하여 사용할 수 있습니다 :

exec sp_select 'tempdb..#mytable'

0

난 당신이 다른 저장 프로 시저를 생성하고 테이블 값 매개 변수를 채울 수 있다고 생각 해결책이있다 그리고 당신의 메인 프로 시저를 호출 한 다음 당신이 만든 테스트 절차에서 디버깅을 시작합니다.