Sto lavorando a un componente .NET che ottiene un set di dati dal database, esegue alcune logiche di business su quel set di dati e quindi aggiorna i singoli record nel database tramite una stored procedure simile a spUpdateOrderDetailDiscountedItem
.Qual è una buona alternativa all'attivazione di una stored procedure 368 volte per aggiornare il database?
Per insiemi di dati di piccole dimensioni, questo non è un problema, ma quando avevo un insieme di dati molto grande che richiedeva un'iterazione di 368 chiamate di processo memorizzate per aggiornare i record nel database, mi sono reso conto che avevo un problema . Uno sviluppatore senior ha esaminato il mio codice proc memorizzato e ha detto che sembrava soddisfacente, ma ora mi piacerebbe esplorare un metodo migliore per inviare dati "batch" al database.
Quali opzioni sono disponibili per l'aggiornamento del database in batch? È possibile con i proc memorizzati? Quali altre opzioni ho?
Non avrò la possibilità di installare un ORM completo, ma qualsiasi consiglio è apprezzato.
Sfondo Ulteriori informazioni:
Il nostro modello di accesso ai dati attuali è stato costruito 5 anni fa e tutte le chiamate al db attualmente vengono eseguiti attraverso funzioni modulari/statici con nomi come ExecQuery
e GetDataTable
. Non sono sicuro di essere richiesto per rimanere all'interno di quel modello, ma dovrei fornire un'ottima giustificazione per andare al di fuori del nostro DAL corrente per arrivare al DB.
Vale anche la pena notare che sono abbastanza nuovo quando si tratta di operazioni CRUD e del database. Preferisco di gran lunga giocare/lavorare nel lato .NET del codice, ma i dati devono essere memorizzati da qualche parte, giusto?
memorizzati contenuti Proc:
ALTER PROCEDURE [dbo].[spUpdateOrderDetailDiscountedItem]
-- Add the parameters for the stored procedure here
@OrderDetailID decimal = 0,
@Discount money = 0,
@ExtPrice money = 0,
@LineDiscountTypeID int = 0,
@OrdersID decimal = 0,
@QuantityDiscounted money = 0,
@UpdateOrderHeader int = 0,
@PromoCode varchar(6) = '',
@TotalDiscount money = 0
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
Update OrderDetail
Set Discount = @Discount, ExtPrice = @ExtPrice, LineDiscountTypeID = @LineDiscountTypeID, LineDiscountPercent = @QuantityDiscounted
From OrderDetail with (nolock)
Where OrderDetailID = @OrderDetailID
if @UpdateOrderHeader = -1
Begin
--This code should get code the last time this query is executed, but only then.
exec spUpdateOrdersHeaderForSkuGroupSourceCode @OrdersID, 7, 0, @PromoCode, @TotalDiscount
End
368 operazioni non è molto. – Fosco
È necessario visualizzare il contenuto della procedura memorizzata, anche se astratto ... –
Quasi tutti gli ORM effettuano ancora 368 chiamate al database. Si limitano a raggrupparle. – NotMe