2013-09-12 2 views
0

на основе учебника по SQL Temporary Tables, оно должно быть в порядке, чтобы создать временную таблицу с помощью SELECT * INTO #tempTable FROM tableA, но это бросает мне SQLException, когда я пытаюсь сказать, что SELECT * FROM #tempTableInvalid object name '#tempTable'. Могу ли я узнать, как правильно использовать временную таблицу в C#?C# Выберите Into Explaination/Временные таблицы

string sql = "SELECT * INTO ##tempTable FROM (SELECT * FROM tableA)"; 
using (var command = new SqlCommand(sql, connection)) 
{ 
    string sqlNew = "SELECT * FROM ##tempTable"; 
    using (var command2 = new SqlCommand(sqlNew, connection)) 
    { 
     using (var reader = command2.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       Console.WriteLine(reader["column1"].ToString()); 

      } 
      Console.ReadLine(); 
     } 
    } 
} 

Моя цель tryint с использованием данных, полученных из sqlVar и вставить их в TempTable и выполнять некоторые операции на нем. Очень ценим, есть ли какой-нибудь пример кода о том, как подставить код в код выше. Спасибо.

+2

Временные таблицы, доступные во время сеанса, который создает их. –

+0

@HhamletHakobyan: Мне жаль, что я не мог понять, как исправить мою проблему с вашим описанием. –

+0

Почему вы делаете это во временной таблице? какие действия вам необходимо выполнить против данных? можете ли вы сделать это в коде C#? – christiandev

ответ

6

Но почему вам нужна временная таблица на стороне SQL сервера ..

1), если вы хотите выполнить операцию на C# стороне просто взять данные в DATASET вместо DATAREADER .. и

DataSet dataset = new DataSet(); 
using (SqlConnection conn = new SqlConnection(connString)) 
{ 
    SqlDataAdapter adapter = new SqlDataAdapter();     
    adapter.SelectCommand = new SqlCommand("select * from tableA", conn); 
    conn.Open(); 
    adapter.Fill(dataset); 
    conn.Close(); 
    foreach (DataRow row in dataset.Tables[0]) // Loop over the rows. 
    { 
     // perform your operation 
    } 
} 

2), если вам необходимо выполнить операцию по SQL стороне затем создать stored procedure на сервере SQL .. в stored procedure create #table и использовать его ..

3), и вы не хотите, чтобы создать DATASET, то вы можете взять данные LIST и выполнить операцию на стороне C#

0

Измените временную таблицу от #tempTable на ##tempTable.

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

If Exists(Select * from tempdb..sysobjects Where id = object_id('tempdb.dbo.#tempTable')) 

DROP TABLE #tempTable 
+0

Он по-прежнему бросает мне ту же ошибку. Я обновил свой вопрос, пожалуйста, посмотрите, правильно ли это вы упомянули? –

+0

См. Мой ответ. Вам необходимо создать временную таблицу, прежде чем вы сможете ее использовать! –

0

Я думаю, ваш ответ в комментарии:

Временные таблицы в ходе сессии, которая создает их.

Если вы хотите получить фактические данные, вам необходимо выполнить инструкцию SELECT из этой временной таблицы в пределах той же области.

еще одно:

Я не вижу, что вы выполняете var command, вы упускаете эту линию:

string sql = "SELECT * INTO ##tempTable FROM (SELECT * FROM tableA)"; 
using (var command = new SqlCommand(sql, connection)) 
{ 
    command.ExecuteNonQuery();// This line is missing.. 
    string sqlNew = "SELECT * FROM ##tempTable"; 
    using (var command2 = new SqlCommand(sqlNew, connection)) 
    { 
     using (var reader = command2.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       Console.WriteLine(reader["column1"].ToString()); 

      } 
      Console.ReadLine(); 
     } 
    } 
} 

Но отсутствует линия не является причиной, почему ваша реализация не так ..

+0

Как я уже сказал, я получаю исключение, когда пытаюсь выбрать временную таблицу с исключением «Недопустимое имя объекта» # tempTable''. Все операции находятся в пределах одной области –

+1

Где вы выполняете команду on - var –

+0

Я думал, что у меня есть 'command2.ExecuteReader()'? Пожалуйста, покажите мне, как это сделать, пожалуйста, –

2

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

код следует читать:

string sql = "SELECT * INTO ##tempTable FROM (SELECT * FROM tableA)"; 
using (var command = new SqlCommand(sql, connection)) 
{ 
    command.ExecuteNonQuery(); // <-- THIS 

    string sqlNew = "SELECT * FROM ##tempTable"; 
    using (var command2 = new SqlCommand(sqlNew, connection)) 
    { 
     using (var reader = command2.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       Console.WriteLine(reader["column1"].ToString()); 

      } 
      Console.ReadLine(); 
     } 
    } 
} 
Смежные вопросы