【问题标题】:Is it possible to inspect the contents of a Table Value Parameter via the debugger?是否可以通过调试器检查表值参数的内容?
【发布时间】:2010-06-09 10:08:44
【问题描述】:

有谁知道是否可以使用 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)' 但我没有找到任何工具可以让我实际查看构成该表的行。

【问题讨论】:

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


    【解决方案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;  
    

    【讨论】:

    • 似乎在 SQL Server Management Studio 中运行良好 - 当然这比完全不知道表值参数中的内容要好。不过,如果您通过 C# 脚本调试存储过程,那就不是太好了。您的代码必须将调试输出与实际输出分开。如果引发异常,它也会在 C# 中崩溃 - 据我所知,没有办法通过 C# 获得任何异常结果。
    【解决方案2】:

    尝试按照您的描述进行操作没有成功。所以我想这还不可能。将等待 SSMS 2010

    【讨论】:

      【解决方案3】:

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

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

      exec sp_select 'tempdb..#mytable'

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2011-08-21
          • 2011-08-22
          • 2013-02-07
          • 1970-01-01
          • 1970-01-01
          • 2020-06-03
          • 2010-09-17
          • 1970-01-01
          • 2012-05-07
          相关资源
          最近更新 更多