Utilizzo di OPENROWSET di leggere un file di Excel in una tabella temporanea; come faccio riferimento che tavolo?

StackOverflow https://stackoverflow.com/questions/863735

Domanda

Sto cercando di scrivere una stored procedure che leggerà un file di Excel in una tabella temporanea, quindi massaggiare alcuni dei dati nella tabella, quindi inserire le righe selezionate da tavolo che in una tabella permanente.

Quindi, si inizia in questo modo:

SET @SQL = "select * into #mytemptable FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database="+@file+";HDR=YES', 'SELECT * FROM [Sheet1$]')"

EXEC (@SQL)

Che molto sembra funzionare.

Tuttavia, se poi provare qualcosa di simile:

Select * from #mytemptable

ottengo un errore:

nome di oggetto non valido '#mytemptable'

Perché non è #mytemptable riconosciuta? C'è un modo per avere #mytemptable accessibile al resto della stored procedure?

Molte grazie in anticipo!

È stato utile?

Soluzione

Non ho il tempo di prendere in giro questo in su, in modo da non so se funzionerà, ma provare a chiamare il vostro tavolo '## mytemptable' invece di '#mytemptable'

Sto indovinando il problema è che il tavolo non è di portata più dopo aver exec) la stringa SQL (. tabelle temporanee preceduto con due simboli libbra sono globalmente accessibili.

Non dimenticare di cadere quando hai finito con esso!

Altri suggerimenti

Il modo in cui ho fatto questo in passato è stato quello di: In primo luogo, creare la #temp_table utilizzando CREATE TABLE. In secondo luogo, costruire la query dinamica come di consueto inserimento nel #temp_table In terzo luogo, utilizzare exec @sql sp_executesql.

Con questo metodo non è necessario il temp_table ambito a livello globale ##.

Si può usare nello stesso ambito compreso l'intero script nella query dinamica:

DECLARE @strSQL nvarchar(max)
DECLARE @file varchar(100)

SET @file='c:\myfile.xls'
SET @strSQL=N'SELECT * INTO #mytemptable FROM OPENROWSET(''Microsoft.Jet.OLEDB.4.0'', ''Excel 8.0;Database='+@file+';HDR=YES'', ''SELECT * FROM [Sheet1$]'');'
SET @strSQL=@strSQL+N'SELECT * FROM #mytemptable'

EXECUTE sp_executesql @strSQL
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top