使用TVP表值参数,有哪些步骤要谨慎?

时间:2013-04-02 17:39:52

标签: sql-server sql-server-2008 ado.net

我在ADO.NET中使用表值参数,我的存储过程无法正常工作。我有另外两个工作正常。我比较了代码表等的顺序,他们似乎都没问题。

数据从我的代码传递到存储过程,没有错误,它不会简单地插入。我想知道是否有一些我不知道的东西我错过了...我完全迷失了...花了很多时间试图想但不能。

一切似乎都很好没有任何错误但它没有用。

这是类型:

CREATE TYPE [dbo].[NameTableType] AS TABLE(
[ID] [int] NULL,
[MYID] [int] NULL,
[Name] [varchar](50) NULL,
    )
    GO

这是我的表

ALTER PROCEDURE [dbo].[Insert]
(
@TVP as NameTableType readonly
)                                      
AS
  BEGIN TRANSACTION
  BEGIN TRY
      INSERT INTO [dbo].[MYTABLE]
      ([ID],[MYID],[NAME])
      SELECT [ID],[MYID],[NAME]
       from @TVP
      COMMIT TRANSACTION
  END TRY

  BEGIN CATCH
      ROLLBACK TRANSACTION
  END CATCH 

我的数据库中是否应该谨慎,这是什么?如果程序失败,有没有办法返回错误?

非常感谢任何建议。

由于

2 个答案:

答案 0 :(得分:2)

不要只是捕获并丢弃错误,请尝试:

BEGIN CATCH
    ROLLBACK TRANSACTION;
    DECLARE @msg NVARCHAR(MAX) = ERROR_MESSAGE();
    RAISERROR(@msg, 11, 1);
    RETURN;
END CATCH

现在你基本上说“如果有错误,就忽略它。”

答案 1 :(得分:1)

  1. 检查是否有导致问题的任何触发器。
  2. 在这种情况下,Sql Profiler非常有用