簡體   English   中英

使用一個插入語句為多個值填充 ado.net 中的表值參數?

[英]Populate a table-valued parameter in ado.net with ONE insert statement for multiple values?

我有一些 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 生成的上述示例執行得更好。 有任何想法嗎?

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 復制批處理。

表值參數是TDS 網絡協議以及 SQL Server 數據庫引擎的一項功能 客戶端將直接使用 TDS 發送數據,而不是在單獨的 INSERT 語句中。

如果您運行 Profiler,您將看到沒有單獨的 SQL:StmtCompleted 事件用於將每一行插入到 TVP 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM