0

我在这里阅读了很多关于如何重用的答案,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”。

4

2 回答 2

1

如果您想使用临时表数据,只需在过程中选择临时表数据,即 select * from #LoanPriorProjected您的过程将结果作为表返回,然后使用 datatable 显示该表数据。

于 2019-09-23T09:25:08.137 回答
-1

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

您可以使用 double hash 制作“更全局”的临时表##temptable

为了更好的解释,请参阅

经典临时表有两种形式,全局或可共享临时表,前缀为“##”,以及本地临时表,其名称前缀为“#”。本地临时表不像普通表,而是全局临时表:您不能在它们上创建视图,或将触发器与它们关联。确定是哪个进程、会话或过程创建了它们有点棘手。稍后我们将为您提供一些帮助。最重要的是,它们比全局临时表更安全,因为只有拥有进程才能看到它。

于 2019-09-23T08:21:49.287 回答