gpt4 book ai didi

c# - 使用多个值的一个插入语句填充 ado.net 中的表值参数?

转载 作者:太空宇宙 更新时间:2023-11-03 18:51:41 24 4
gpt4 key购买 nike

我有一些 C# 代码正在填充一个 TVP,然后在 SQL Server 中调用一个存储过程,它在该 TVP 中传递。它利用标准的 ADO.NET DataTable 和 Rows.Add 来填充行。

sqlCommand.ExecuteNonQuery() 运行时,如果您在 SQL Profiler 中捕获 SQL 跟踪,您将看到类似这样的内容,它在单独的插入语句中填充 TVP 的每一行。

declare @p1 dbo.BigIntTable -- This is a table type

insert into @p1 values(1)
insert into @p1 values(2)
insert into @p1 values(3)
insert into @p1 values(4)
insert into @p1 values(5)

exec dbo.MyProc @InputTVP=@p1
go

我希望它在一条语句中插入所有值,如下所示。下面的示例是有效的 SQL,比上面由 ADO.NET 生成的 SQL 执行得更好。有什么想法吗?

declare @p1 dbo.BigIntTable -- This is a table type

insert into @p1
values
(1)
,(2)
,(3)
,(4)
,(5)

exec dbo.MyProc @InputTVP=@p1
go

最佳答案

Profiler 向您显示的不是客户端实际发送 的内容,而是一种您可以运行以执行相同操作的 TSQL 复制批处理。

表值参数是一个 feature of the TDS network protocol ,以及 SQL Server 数据库引擎。客户端将使用 TDS 直接发送数据,而不是在单独的 INSERT 语句中。

如果您运行 Profiler,您会发现没有单独的 SQL:StmtCompleted 事件用于将每一行插入 TVP。

关于c# - 使用多个值的一个插入语句填充 ado.net 中的表值参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56744315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com