【发布时间】:2019-09-23 08:10:33
【问题描述】:
我在这里阅读了很多关于如何重用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”。
【问题讨论】:
-
必须声明表变量。这是什么意思?
-
@DaleBurrell,实际上当我在服务器端运行查询时,一切正常。
-
Michal 是正确的,您需要一个全局临时表 (
##)。在 proc 结束时会自动删除本地临时表。 -
@Suraj S 是正确的,您应该只选择存储过程中的结果,它们将返回到您的 c# 层。这样做的好处是您可以有多个 select 语句,并在结果集中获得多个表。
标签: sql .net sql-server vb.net global-temp-tables