Infinite Loop durante l'importzione di Excel in SQL

Ho questo codice

USE [DATABASE] SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[GetDataExcel] as DECLARE c CURSOR FOR select Box, Code , Validity FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Barcodes.xlsx;HDR=YES', 'SELECT Box, Code , Validity FROM [sheet1$]') declare @Code as bigint declare @Box as bigint declare @Validity as date begin open c fetch next from c into @Box,@Code,@Validity WHILE @@FETCH_STATUS = 0 begin Insert into Cards (Box, BarCode, ValidityDate) select Box, Code , Validity FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Barcodes.xlsx;HDR=YES', 'SELECT Box, Code , Validity FROM [sheet1$]') fetch next from c into @Box,@Code,@Validity end CLOSE c DEALLOCATE c end 

mentre esport alla tabella "Carte" le righe vuote sono anche copiate nella tabella e il process non si ferma, il ciclo continua e si triggers e il process viene riavviato più volte, la query non si ferma dall'esecuzione a less che non arrestare, quando vedo il contenuto della tabella, vedo i valori NULL delle righe vuote e dei valori delle righe riempite e vengono ripetute, quindi come interrompere la query dalla lettura di righe vuote e bloccarla dalla lettura del file excel e oltre?

Perché non utilizzare qualcosa di simile al posto di un cursore

 INSERT INTO (Box, BarCode, ValidityDate) SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Barcodes.xlsx;HDR=YES', 'SELECT Box, Code, Validity FROM [sheet1$]') 

Prova questo per il tuo ciclo:

 WHILE @@FETCH_STATUS = 0 begin Insert into Cards (Box, BarCode, ValidityDate) select @Box, @Code , @Validity; fetch next from c into @Box,@Code,@Validity end; 

Il tuo codice originale stava recuperando entrambi un cursore e direttamente nell'istruzione from . Questa versione utilizza semplicemente il cursore.

Ho usato l'opzione Task -> Import dati per trasferire i dati da excel a sql e stava ricevendo il ciclo infinito. Ho chiuso lo studio di gestione di SQL Server e ho riprovato la stessa opzione e ha funzionato per me.