web-dev-qa-db-ja.com

Excelから実行されたSQLは一時テーブルを使用できません

ExcelからSQL Serverへのデータ接続を作成し、多くのSQLクエリを正常に実行できました。しかし、一時テーブルが含まれていると、TSQLが機能しません。例えば:

select * into #t from compass3.dbo.freq
select * from #t where freq_id>2

(明らかに、この場合は#tを使用する必要はありません。最も単純な例を示しています。)これはSSMSで正常に機能しますが、Excel経由で実行すると、「接続を更新できませんでした 'audbbicube '。テーブル' ion Query1 'が存在しない可能性があります。

他のいくつかのSO投稿では、人々はset nocount onですが、この場合は違いがありませんでした。

21
MattClarke

以下は動作するようです...

set nocount on
declare @t table(fid int)  -- I'm sure I could add the rest of the columns if I wanted to
insert @t select freq_id from compass3.dbo.freq
select * from @t where fid>2

したがって、nocountをオンにして、一時テーブルではなくテーブル変数を使用する限り、必要なことを達成できます。

13
MattClarke

上記の回答に追加したかった-クエリの先頭でSET NOCOUNT ONを使用するだけで、通常の一時テーブルSELECT name INTO #Names FROM Employeeが機能するはずです。

ここではテーブル変数は必要ありません。

また、SET ANSI_WARNINGS OFFを追加して、「NULL値が集合体によって削除される」などのメッセージを回避することもできます。

20
arjunrc