当我从 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
我需要临时全局表才能相应地用于不同的存储过程 存储过程创建的临时表可以用于另一个存储过程吗?.
有什么解决办法吗?