Usando openrowset para ler um arquivo do Excel em uma tabela temporária; como eu referência nessa mesa?

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

Pergunta

Eu estou tentando escrever um procedimento armazenado que irá ler um arquivo do Excel em uma tabela temporária, em seguida, massageie alguns dos dados na tabela, em seguida, insira as linhas selecionadas de que a tabela em uma tabela permanente.

Assim, ele começa assim:

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

EXEC (@SQL)

Que muito parece funcionar.

No entanto, se eu tente algo como isto:

Select * from #mytemptable

Eu recebo um erro:

nome do objeto inválido '#mytemptable'

Por que não #mytemptable reconhecido? Existe uma maneira de ter #mytemptable acessível ao resto do procedimento armazenado?

Muito obrigado antecipadamente!

Foi útil?

Solução

Eu não tenho tempo para zombar isso, então eu não sei se ele vai trabalhar, mas tentar chamar sua mesa '## mytemptable' em vez de '#mytemptable'

Eu estou supondo que o problema é que a sua tabela não está no escopo mais depois de exec () da string sql. tabelas temporárias precedidos por dois símbolos da libra são globalmente acessível.

Não se esqueça de deixar cair quando você está feito com ele!

Outras dicas

A maneira que eu tenho feito isso no passado era: Primeiro, crie o #temp_table usando CREATE TABLE. Em segundo lugar, construir a consulta dinâmica como a inserção de costume na #temp_table Terceiro, o uso exec sp_executesql @sql.

Com este método você não vai precisar do escopo global ## temp_table.

Você pode usá-lo no mesmo escopo, incluindo todo o roteiro na consulta dinâmica:

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top