powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Временные таблицы через SqlCommand
4 сообщений из 4, страница 1 из 1
Временные таблицы через SqlCommand
    #38630801
knocking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
WPF, C#, локальная БД MS SQL 2008, десктопная программа, VS 2010, .Net 4.0

Как можно создать временную таблицу используя SqlCommand, SqlConnection, SqlDataReader и пр? Или временные таблицы можно делать только в Management Studio?

Суть задачи.
Есть таблица с полем Weight и Comission, примерно такая:

Weight | Comission
16 | 1.20
16 | 2.30
52 | 3.10
54 | 3.35

В запросе нужно округлить Weight до n в меньшую сторону и сгруппировать. Например, если n = 5, то результат должен быть таким:

Weight | Comission
15 | 3.50
50 | 6.45

Делаю так:

commandText = "Select Round(Weight/5,0)*5 As Weight, Sum(Comission) AS Comission From myTable Group by Weight" и получаю неправильный результат:

Weight | Comission
15 | 3.50
50 | 3.10
50 | 3.35

Думаю, что самое простое это использовать временную таблицу, в нее сначала поместить округленные числа до n, а потом уже сгруппировать. Как использовать временную таблицу? Спасибо!
...
Рейтинг: 0 / 0
Временные таблицы через SqlCommand
    #38630884
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Group by Round(Weight/5,0)*5
2. Как вариант - Round(Weight/5,0)*5 вынести в cross apply, группировать по полю cross apply.
3. Через SqlCommand можно делать всё то же самое, что и в SSMS. Конструкции create table #mytable и select ... into #mytable никто не отменял. Но нужно помнить про visibility scope временных таблиц.
4. Вопрос для раздела по SQL Server, к SL/WPF он вообще никаким боком.
...
Рейтинг: 0 / 0
Временные таблицы через SqlCommand
    #38630897
knocking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открыл для себя пакетные запросы)))
Получилось так решить проблему. Сократил для наглядности

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
//Округляю до нужного разряда и помещаю во временную таблицу
commandText = "Select Round(Weight/@pRange, 0)*@pRange As Weight, Comission INTO tepmTable From myTable;"; 
//Выбираю из временной таблицы и группирую уже по округленному ранее значению
commandText += "Select Weight, Sum(Comission) AS Comission From tepmTable Group by Weight;"; 
//Удаляю временную таблицу
commandText += "Drop table tepmTable";

SqlConnection sqlConnection = new SqlConnection(glVar.sConnectionString);
sqlCommand = new SqlCommand();
sqlCommand.CommandText = commandText;
sqlCommand.Connection = sqlConnection;
sqlConnection.Open();
SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();

//sqlDataReader.NextResult(); //тут по идее нужно ко второму пакету перейти, но второй почему-то пустой
while (sqlDataReader.Read())
     {
     sWeight = Convert.ToInt32(sqlDataReader["Weight"]);
     Comission = Convert.ToDecimal(sqlDataReader["Comission"]);
     ...
     }
sqlDataReader.Close();
sqlConnection.Close();


Вот тут пишут, что нельзя в одном пакете создавать и удалять одну и ту же таблицу, но у меня вроде работает.

До конца не уверен, что все верно, пока тестирую.
...
Рейтинг: 0 / 0
Временные таблицы через SqlCommand
    #38630903
knocking
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны1. Group by Round(Weight/5,0)*5

Да... тут я ступил жестко. Пожалуй, это самый простой способ в моем случае, наверное, на нем сейчас и остановлюсь.

Сон Веры Павловны2. Как вариант - Round(Weight/5,0)*5 вынести в cross apply, группировать по полю cross apply.

Пока не знаю что такое "cross apply". Почитаю

Сон Веры Павловны3. Через SqlCommand можно делать всё то же самое, что и в SSMS. Конструкции create table #mytable и select ... into #mytable никто не отменял. Но нужно помнить про visibility scope временных таблиц.

Да, вот тут уже прочитал "...Код исполняется в компоненте Database Engine одинаково и одними и теми же разрешениями независимо от того, как передаются его инструкции."

Сон Веры Павловны4. Вопрос для раздела по SQL Server, к SL/WPF он вообще никаким боком.
Я подумал, что там решат, что мне нужно это делать из SSMS

Спасибо, Сон Веры Павловны!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Временные таблицы через SqlCommand
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]