我有以下代码:
using (var connection = new SqlConnection(constr))
{
connection.Open();
var createTempTables = new SqlCommand("[dbo].[p_CreateTempTable]", connection)
{
CommandType = CommandType.StoredProcedure
};
createTempTables.Parameters.Add(new SqlParameter("@Id", 2));
createTempTables.ExecuteNonQuery();
var actualCommand = new SqlCommand("[dbo].[p_Test]", connection)
{
CommandType = CommandType.StoredProcedure
};
var dt = new DataTable();
dt.Load(actualCommand.ExecuteReader());
}
Run Code Online (Sandbox Code Playgroud)
基本上,[dbo].[p_CreateTempTable]从表中选择与 ID inut 匹配的行作为参数。然后,[dbo].[p_Test]只需选择临时表。据我所知,只要连接没有关闭,临时表就应该持续存在,但我总是收到一个异常,说我的临时表不存在。为什么这不起作用?
注意:如果我改为使用在 C# 中创建临时表的文本命令,则程序运行没有问题。但是我想避免这样做,因为在创建临时表时会有更多的验证,并且由于应用程序是 WinForms,我想避免每次逻辑更改时重新编译。
我有一个PL/SQL过程,它创建一个临时表,然后使用游标从此临时表中提取数据,处理数据,然后删除临时表.但是,如果数据库中不存在表,则Oracle不允许使用游标.
请帮我处理这件事.
我正在尝试编写一些动态 SQL 查询,这些查询将结果选择到带有查询字符串的临时表中。它看起来像这样:
DECLARE @SQL Varchar(4000)
SET @SQL = 'SELECT * INTO #tmp_tab FROM dbo.sometable'
EXEC(@SQL)
Run Code Online (Sandbox Code Playgroud)
运行代码不会出现任何错误,但是当我想从 中选择时#tmp_tab,它说该表不存在。
所以我想知道它是否有什么特殊的语法,或者动态SQL不支持这样的操作?
非常感谢。
我需要像这样选择整个月的查询
DECLARE @ano TABLE (
mes int
)
insert @ano (mes) values (1)
insert @ano (mes) values (2)
insert @ano (mes) values (3)
insert @ano (mes) values (4)
insert @ano (mes) values (5)
insert @ano (mes) values (6)
insert @ano (mes) values (7)
insert @ano (mes) values (8)
insert @ano (mes) values (9)
insert @ano (mes) values (10)
insert @ano (mes) values (11)
insert @ano (mes) values (12)
select * from @ano
Run Code Online (Sandbox Code Playgroud)
但我正在使用的程序不接受插入... D: