Использование openrowset для чтения файла Excel во временную таблицу;как мне ссылаться на эту таблицу?

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

Вопрос

Я пытаюсь написать хранимую процедуру, которая будет считывать файл Excel во временную таблицу, затем обрабатывать некоторые данные в этой таблице, а затем вставлять выбранные строки из этой таблицы в постоянную таблицу.

Итак, все начинается так:

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

EXEC (@SQL)

Кажется, это работает.

Однако, если я попробую что-то вроде этого:

Select * from #mytemptable

Я получаю сообщение об ошибке:

Неверное имя объекта «#mytemptable».

Почему #mytemptable не распознается?Есть ли способ сделать #mytemptable доступным для остальной части хранимой процедуры?

Спасибо заранее!

Это было полезно?

Решение

У меня нет времени это издеваться, поэтому я не знаю, сработает ли это, но попробуйте назвать вашу таблицу «##mytemptable» вместо «#mytemptable».

Я предполагаю, что ваша проблема в том, что ваша таблица больше не находится в области видимости после того, как вы выполнили() строку sql.Таблицы Temp, которым предшествуют два символа фунта, доступны глобально.

Не забудьте бросить его, когда закончите!

Другие советы

Раньше я делал это следующим образом:Сначала создайте #temp_table с помощью CREATE TABLE.Во -вторых, постройте динамический запрос, как обычно, вставляя в треть #temp_table, используйте exec sp_executesql @sql.

При использовании этого метода вам не понадобится глобальная ##temp_table.

Вы можете использовать его в той же области, включая весь скрипт в динамическом запросе:

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top