![](/img/trans.png)
[英]TSQL Use record currently being inserted to select data in another table
[英]Preserving non-inserted data for a record
我正在嘗試使用表值參數(TVP),以及如何從C#代碼中使用它們。 TVP的一個特定方面給我帶來麻煩:將數據列表傳遞給存儲過程時,並希望在數據從數據庫返回后更新該列表。
這是一個將包含在列表中的示例類:
public class Phone
{
int _phoneID;
string _phoneNumber;
Guid _correlationID;
}
當將此列表傳遞給使用TVP的存儲過程時,如何將_phoneID和_phoneNumber插入數據庫中,並在插入后根據_correlationID使用_phoneID更新電話列表?
這是一個示例表,類型和存儲過程:
Create Table PhoneTable
(
PhoneID int identity(1,1),
PhoneNumber varchar(20)
)
GO
Create Type PhoneType As Table
(
PhoneNumber varchar(20),
CorrelationID uniqueidentifier
)
GO
Create Procedure usp_Phone_Insert
@Input PhoneType ReadOnly
AS
Declare @Output Table (PhoneID int, PhoneNumber varchar(20))
Insert Phone (PhoneNumber)
Output
inserted.PhoneID,
inserted.PhoneNumber
Into @Output
Select
PhoneNumber
From
@Input
Select PhoneID, PhoneNumber From @Output
GO
相關ID的原因是能夠跟蹤從應用程序到數據庫並一直追溯到對象的對象。
基於我對內部聯接的疑問,我得出了這個解決方案,它看起來工作得很好。 僅當要插入的數據在集合中唯一時,此方法才有效。
修改的表,類型和存儲過程可以滿足我對相關ID的需求:
Create Table PhoneTable
(
PhoneID int identity(1,1),
PhoneNumber varchar(20)
)
GO
Create Type PhoneType As Table
(
PhoneNumber varchar(20),
CorrelationID bigint
)
GO
Create Procedure usp_Phone_Insert
@Input PhoneType ReadOnly
AS
Declare @Output Table (
PhoneID int,
PhoneNumber varchar(20),
CorrelationID bigint)
Insert Phone (PhoneNumber)
Output
inserted.PhoneID,
inserted.PhoneNumber
Into @Output
Select
PhoneNumber
From
@Input
Select
O.PhoneID,
O.PhoneNumber,
I.CorrelationID
From
@Output O
Inner Join @Input I on I.PhoneNumber = O.PhoneNumber
GO
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.