C#コードからストアドプロシージャを呼び出すと、なぜ一時テーブルを作成できないのかを調査するために、丸一日と何時間も費やしました。
C#コードの一部を想定しましょう:
public void GetDataByFilter(string item, string filter ...) {
...
// provide stored procedure in new SqlCommand object
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.Add("@val1", aValue1);
sqlCommand.Parameters.Add("@val2", aValue2);
...
while(sqlDataReader.Read()) { /* process info here */ }
}
と私のストアドプロシージャ
ALTER PROCEDURE [dbo].[aProcedure]
@val1 VARCHAR(255),
@val2 VARCHAR(255),
...
AS
BEGIN
IF OBJECT_ID(N'tempdb..##aTempTable') IS NULL
CREATE TABLE tempdb..##aTempTable (
id1 INT,
id2 INT,
id3 VARCHAR(255),
...
)
ELSE
TRUNCATE TABLE tempdb..##aTempTable
-- insert information into this table
SELECT @paramList = ' /*list of parameters*/';
EXEC sp_executesql @sql, @paramList, ... parameters
END
C#コードでは、別の関数で、私は提供しました
sqlCommand.CommandText = "SELECT * FROM tempdb..##aTempTable";
tempdb..##aTemTable
しかし、存在しない例外がスローされました。
SSMS(Sql Server Management Studio)内でストアドプロシージャを実行すると、テーブルが作成されます。
問題は、だけでなくTRUNCATE TABLE
操作にもあります。CREATE TABLE
それに応じて異なるストアドプロシージャで使用するための一時グローバルテーブルが必要です。ストアドプロシージャによって作成された一時テーブルを別のストアドプロシージャで使用することは可能ですか?。
解決策はありますか?