一時テーブルにExcelファイルを読むためにOPENROWSETを使用しました。どのように私は、そのテーブルを参照していますか?

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」

私はあなたの問題をあなたのテーブルはもうスコープにした後、あなたのexec()SQL文字列ではないことをされて推測しています。 2ポンド記号で始まる一時テーブルは、グローバルにアクセス可能です。

あなたはそれで終わったときにドロップすることを忘れないでください!

他のヒント

私は過去にこれをやった方法がしました: まず、CREATE TABLEを使用して#temp_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