是否可以通过调试器检查表值参数的内容?

时间:2010-06-09 10:08:45

标签: debugging sql-server-2008 stored-procedures table-valued-parameters

有没有人知道是否可以使用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 个答案:

答案 0 :(得分:1)

我没有成功尝试按照你所描述的那样做。所以我想这还不可能。将等待SSMS 2010

答案 1 :(得分: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;  

答案 2 :(得分:1)

表变量是不可能的,但我构建了a procedure,它将显示来自另一个数据库连接的临时表的内容。 (普通查询无法实现)。 请注意,它使用DBCC PAGE&用于访问数据的默认跟踪,因此仅用于调试目的。

您可以通过在代码中放置断点,打开第二个连接并调用:

来使用它

exec sp_select 'tempdb..#mytable'

答案 3 :(得分:0)

有一个解决方案我认为你可以创建另一个存储过程并填充表值参数并调用你的主程序,然后从你所做的测试程序开始调试。