一時テーブルにExcelファイルを読むためにOPENROWSETを使用しました。どのように私は、そのテーブルを参照していますか?
-
21-08-2019 - |
質問
私はその後、永久テーブルにそのテーブルから選択された行を挿入し、そのテーブル内のデータの一部をマッサージ、一時テーブルに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
所属していません StackOverflow