Sql server 使用TVP表值参数,有哪些步骤值得注意?
我正在ADO.NET中使用表值参数,并且我的存储过程工作不正常。我有两个其他的工作很好。我比较了代码和表的顺序等,它们似乎都是好的 数据从我的代码传递到存储过程中,不会发生错误,而不是简单地插入。我不知道是否有什么我不知道我错过了。。。我完全迷路了。。花了很多时间想弄清楚,但没办法 一切似乎都很好没有错误什么都没有,但它不工作 以下是类型:Sql server 使用TVP表值参数,有哪些步骤值得注意?,sql-server,sql-server-2008,ado.net,Sql Server,Sql Server 2008,Ado.net,我正在ADO.NET中使用表值参数,并且我的存储过程工作不正常。我有两个其他的工作很好。我比较了代码和表的顺序等,它们似乎都是好的 数据从我的代码传递到存储过程中,不会发生错误,而不是简单地插入。我不知道是否有什么我不知道我错过了。。。我完全迷路了。。花了很多时间想弄清楚,但没办法 一切似乎都很好没有错误什么都没有,但它不工作 以下是类型: CREATE TYPE [dbo].[NameTableType] AS TABLE( [ID] [int] NULL, [MYID] [int] NULL
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
在我的数据库中是否有我应该注意的事情?它是什么?如果过程失败,是否有方法返回错误
非常感谢您的建议
谢谢,不要只是捕获并丢弃错误,请尝试:
BEGIN CATCH
ROLLBACK TRANSACTION;
DECLARE @msg NVARCHAR(MAX) = ERROR_MESSAGE();
RAISERROR(@msg, 11, 1);
RETURN;
END CATCH
现在你基本上是说“如果有错误,就忽略它。”
您有权访问SQL Server Management Studio(SSMS)吗?如果是,请尝试在那里运行存储过程。如果它在SSMS中运行,那么您的ADO.Net代码有问题,这很可能是问题的根源。您所说的“不工作”是什么意思?数据没有出现在您的表中?请检查以确保连接到数据库的同一副本。您的连接字符串是否包含类似于
AttachDbFileName
的参数?抱歉,我不熟悉SSMS工具,但我可以获取它。如果我获取该工具,您能告诉我在哪里可以运行该工具吗?它不插入,我的数据库与其他2个插入一起工作。我没有此工具。我的VS中没有错误。那么您是否尝试过在CATCH
块中执行任何有用的操作,比如引发错误?