簡體   English   中英

保留記錄的非插入數據

[英]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.

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