Как получить #temptable данные, которые были созданы внутри хранимой процедуры и SqlCommand? - PullRequest
0 голосов
/ 23 сентября 2019

Я читал здесь много ответов о том, как использовать 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'.

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

, если вы хотите использовать данные временной таблицы, просто выберите данные временной таблицы внутри процедуры, т.е. select * from #LoanPriorProjected ваша процедура вернет результат в виде таблицы, а затем с помощью datatable отобразит данные этой таблицы.

0 голосов
/ 23 сентября 2019

Временные таблицы ... временные - они существуют в одном соединении.Таким образом, при выполнении процедуры создается таблица, затем команда завершается, а временная таблица исчезает.

Вы можете создать «более глобальную» временную таблицу, используя двойной хэш ##temptable.

.объяснение см. this :

Классическая временная таблица представлена ​​в двух вариантах: глобальная или разделяемая временная таблица с префиксом «##» и локальная временная таблица, чье имя имеет префикс «#». Локальные временные таблицы меньше похожи на обычные таблицы, чем глобальные временные таблицы: вы не можете создавать для них представления или связывать триггеры.Немного сложно понять, какой процесс, сессия или процедура их создали.Мы немного поможем вам позже.Самое главное, они более безопасны, чем глобальные временные таблицы, так как их может видеть только процесс владения.

...