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