C# 一時ファイルが無効になる への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 C# 一時ファイルが無効になる  (社会人)
投稿日時
2023/11/7 14:10:58
回答ありがとうございます。
#ローカルの問題でした。
##グローバルに変更後は問題なく動作しました。
#ローカルの問題でした。
##グローバルに変更後は問題なく動作しました。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2023/11/7 13:53:27
SQL Server においては
『# で始まるテーブル名』は、自ユーザーのみが使用可能な「ローカル一時テーブル」
『## で始まるテーブル名』は、全ユーザーが使用可能な「グローバル一時テーブル」
ですよね。
両者は同一のセッションになっていますか?
Connection が別の場合、
第一接続で生成されたローカル一時テーブル #tmp01 を
第二接続で利用するといったことはできません。
『# で始まるテーブル名』は、自ユーザーのみが使用可能な「ローカル一時テーブル」
『## で始まるテーブル名』は、全ユーザーが使用可能な「グローバル一時テーブル」
ですよね。
両者は同一のセッションになっていますか?
Connection が別の場合、
第一接続で生成されたローカル一時テーブル #tmp01 を
第二接続で利用するといったことはできません。
投稿者 ケンケン  (社会人)
投稿日時
2023/11/7 10:03:25
#C
dbは、SqlServer 2019 です。
select
N_Tcd
,sum(N_Uriage ) as uriage
,sum(N_Syouhizei) as syouhizei
INTO #tmp01
from hanbai.dbo.T_Huriage
以下省略
上記でselect into にて一時ファイルを作成しましたが、
update hanbai.dbo.T_tokui
set
N_Zenkaizan = 0
以下省略
上記をを実行すると落ちました。
エラー内容です。
System.Data.SqlClient.SqlException (0x80131904): オブジェクト名 '#tmp01' が無効です。
何方かご存知方御教授お願いします。
dbは、SqlServer 2019 です。
select
N_Tcd
,sum(N_Uriage ) as uriage
,sum(N_Syouhizei) as syouhizei
INTO #tmp01
from hanbai.dbo.T_Huriage
以下省略
上記でselect into にて一時ファイルを作成しましたが、
update hanbai.dbo.T_tokui
set
N_Zenkaizan = 0
以下省略
上記をを実行すると落ちました。
エラー内容です。
System.Data.SqlClient.SqlException (0x80131904): オブジェクト名 '#tmp01' が無効です。
何方かご存知方御教授お願いします。
グローバルの場合、作成されるとすべてのユーザーに表示され、別セッションからも参照できます。
(このテーブルを参照するすべてのユーザーが SQL Server のインスタンスから切断すると削除されます)
より具体的に言えば、グローバル一時テーブルを作成したセッションが終了して、そのグローバル一時テーブルを参照していた最後の Transact-SQL ステートメントの完了時に削除されるということです。
ローカル一時テーブルを利用した SQL のサンプルを紹介しておきます。
https://stackoverflow.com/questions/37954565/creating-and-populating-temp-table-in-different-commands