如何检索在存储过程和 SqlCommand 中创建 #temptable 数据?



我在这里阅读了很多关于如何重用SqlCommand的答案,但没有一个是这个问题的答案。基本上我有一个存储过程,可以创建一个#temptable

像这样:

CREATE PROCEDURE [dbo].[ProjectPriorInterestIncome]
@selectedDate Date,
@EndDay Date
AS
BEGIN
CREATE TABLE #LoanPriorProjected
(
Colums here....
)
END

在我的.Net中,我有一个执行存储过程的SqlCommand。像这样:

Using cmd As New SqlCommand("ProjectPriorInterestIncome", SQLConn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@SelectedDate", frmDefault.dtDate.Value)
cmd.Parameters.AddWithValue("@EndDay", Format(GetLastDayofMonth(frmDefault.dtDate.Value), "12/31/yyyy"))
cmd.ExecuteNonQuery()  
'Executing a select query from #temptable'
cmd.CommandText = "SELECT * FROM #LoanPriorProjected"
cmd.CommandType = CommandType.Text
cmd.ExecuteNonQuery()
End Using

现在,当我尝试从#LoanPriorProjected表中执行选择查询时,它说

对象名称"#LoanPriorProjected"无效。

如果要使用临时表数据,只需在过程中选择临时表数据,即select * from #LoanPriorProjected过程将返回结果作为表,则使用数据表显示此表数据。

临时表是...临时 - 它们存在于一个连接中。因此,在执行过程时,将创建表,然后完成命令并消失临时表。

您可以使用双哈希##temptable创建"更全局"的临时表。

为了更好的解释,请参阅以下内容:

经典临时表

有两种形式:全局或可共享临时表(以"##"为前缀(和本地临时表(名称以"#"为前缀(。本地临时表不像全局临时表那样与普通表不同:您无法在其上创建视图,也无法将触发器与它们关联。找出创建它们的过程、会话或过程有点棘手。我们稍后会为您提供一些帮助。最重要的是,它们比全局临时表更安全,因为只有拥有进程才能看到它。

相关内容

  • 没有找到相关文章

最新更新