È possibile ALTER TABLE (DDL) nel mezzo di una transazione DML sulla stessa tabella?

c# ddl dml sqlbulkcopy sqltransaction

Domanda

Supponi di iniziare una SqlTransaction da C # all'interno della quale stai inserendo dati da un DataTable in una tabella SQL, ma questi dati sono MOLTO di dati, quindi lo fai "in pezzi" con un SqlBulkCopy all'interno della transazione SQL e si limita a transazione se TUTTI i blocchi sono stati copiati correttamente.

Ora, diciamo che sai che a volte la lunghezza dei valori inseriti supererà la dimensione massima della colonna nella tabella di destinazione, quindi SqlBulkCopy fallirà in quel punto per quel particolare "chunk". E 'possibile (o anche consigliabile) catturare questa eccezione e alterare la tabella / colonna per aumentare la lunghezza massima della colonna di destinazione, quindi continuare SqlBulkCopy'ing i dati che prelevano il prossimo' pezzo 'da copiare anche se non hai hai impegnato la tua "transazione di inserimento" con cui hai iniziato?

Quindi, provando a parafrasare questo, è possibile avviare una transazione DML, fermarsi nel mezzo di questa transazione senza commit, eseguire un DDL per modificare la tabella di destinazione, quindi completare il file DML originale e eseguirne il commit?

Risposta popolare

Per rispondere alla tua domanda, è possibile modificare una tabella tra le istruzioni di inserimento. Se si imposta la transazione su ciascun batch, sarà necessario eseguire il rollback di 1 batch per aggiornare la lunghezza della colonna. Vi è un maggiore sovraccarico con questo approccio rispetto all'impostazione delle lunghezze delle colonne prima di iniziare l'inserimento dei dati.

Un buon approccio sarebbe quello di controllare ogni colonna dei dati di origine per una lunghezza massima e quindi aggiornare il database di destinazione con le nuove lunghezze di colonna prima di iniziare l'importazione dei dati. In questo modo sai che il database di destinazione può accettare tutti i dati che verranno forniti.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché