Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Определить кол-во записей из временой таблицы  [new]
tasha klemer
Member

Откуда:
Сообщений: 168
Доброго времени суток
мне необходимо осуществить вставку данных из временой таблицы.
При работе я создаю глобальные временые таблицы, имя их создаю по принципу имя основной таблицы+имя пользователя.
Создаю процедурой, запускаемой из Win приложения

set @mytable ='##TNetBild'+ SYSTEM_USER


Все данные при работы в Win формы , пишутся в эту временную таблицу, но при закрытие пользовтеля справшивают, сохранить даннеы или нет, и вслуччае "да" мне нужно записать все новые или измененные данные из временных таблиц в основные.
Для этого я в структуре временой таблицы добавила еще одно поле признак в которое пишщется информация о том изменялась ли эта запись или была создана вновь.
задача стоит в следующем, мне нужно в процедуре выполняемой на сервере подсчитать количество изменяемых записей либо вставленных вновь.Я пытаюсь сделать это следующим образом

declare @e int
EXEC @e = ('select count [Id_StrNetBild] from tempdb.'+@mytable+'where StateWin=0')	
execute ('INSERT INTO [TNetBild]([id_Obj],[LenHead],[LenWater],[LenDrain],[LenGas],[LenElectro],[Texnical],[Other],[LenTelephon] VALUES select [Id_StrNetBild],[id_Obj],[LenHead],[LenWater],[LenDrain],[LenGas],[Texnical],[Other],[LenTelephon] from tempdb.'+@mytable+'where StateWin=0')


@mytable -входящий параметр.
10 сен 14, 16:52    [16560492]     Ответить | Цитировать Сообщить модератору
 Re: Определить кол-во записей из временой таблицы  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
от шо бывает когда сишнки\шарписты делают логику в БД :(
10 сен 14, 17:02    [16560562]     Ответить | Цитировать Сообщить модератору
 Re: Определить кол-во записей из временой таблицы  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
tasha klemer,

А что, используемое Вами средство разработки не позволяет иметь редактируемый набор данных в буфере на клиенте? Ну, накрайняк использовать локальные временные таблицы и не разрывать коннект к бд?
10 сен 14, 17:05    [16560590]     Ответить | Цитировать Сообщить модератору
 Re: Определить кол-во записей из временой таблицы  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
tasha klemer,

Вы совершенн зря связались с глобальнaми временными таблицами(да еще с уникальными именами), Вам уже правильно сказали.
Либо локальные временные таблицы, либо одна таблица c заранее заданным именем с дополнительной колонкой "пользователь".

Если позарез хотите сохранить текущую архитектуру, делайте что-то вроде
delete TempCount
where spid = @@SPID

EXEC @e = ('Insert into TempCount(SPID, CountRec) select @@SPID,  count [Id_StrNetBild] from tempdb.'+@mytable+'where StateWin=0')

select CountRec
from TempCount
where SPID = @@SPID
10 сен 14, 17:32    [16560767]     Ответить | Цитировать Сообщить модератору
 Re: Определить кол-во записей из временой таблицы  [new]
VGalamakh
Member

Откуда: Киев (Альба)
Сообщений: 66
Раз пошли таким путем.
Создайте лучше обычную таблицу, в нее добавьте поле "SYSTEM_USER" и пусть "Все данные при работы в Win формы , пишутся в эту таблицу"

Если же хочется "кнструировать" запросы, то обратите внимание на sp_executesql - сможете получать output параметры, в случае необходимости.
10 сен 14, 17:33    [16560773]     Ответить | Цитировать Сообщить модератору
 Re: Определить кол-во записей из временой таблицы  [new]
tasha klemer
Member

Откуда:
Сообщений: 168
А чем плохи глобальные таблицы?

Изначально передо мной стояла задача следующая, пользователь вводит данные (в форме используется несколько таблиц с которыми пользователь может произвести insert, edit,delete) , но при выходе из формы его спрашивает - сохранить? [да/нет]
Если [да]- сохраяем все изменения, если [Нет]- сделать откат! На форуме WINForms предложили писать все в копии временых таблиц, а после , если [да] перезаписать все изменения в основную.

Если вы не рекомендуете связываться с временными таблицами, есть у меня процедура удаления всех записей из связаных таблиц по id обьекта , но этоподойдет только для того обьекта который новый, но какой вариант есть для записей которые были в базе и их редактировали или вообще какая то информация была удалена из части таблиц, как здесь можно откатить на начальные данные!
11 сен 14, 06:46    [16562167]     Ответить | Цитировать Сообщить модератору
 Re: Определить кол-во записей из временой таблицы  [new]
tasha klemer
Member

Откуда:
Сообщений: 168
VGalamakh
Раз пошли таким путем.
Создайте лучше обычную таблицу, в нее добавьте поле "SYSTEM_USER" и пусть "Все данные при работы в Win формы , пишутся в эту таблицу"

Если же хочется "кнструировать" запросы, то обратите внимание на sp_executesql - сможете получать output параметры, в случае необходимости.


а можно подробнее про этот вариант с полем System_user , или ссылку на подобную статью.
11 сен 14, 06:51    [16562172]     Ответить | Цитировать Сообщить модератору
 Re: Определить кол-во записей из временой таблицы  [new]
VGalamakh
Member

Откуда: Киев (Альба)
Сообщений: 66
tasha klemer,

в нее добавьте поле "SYSTEM_USER" - имелось ввиду, не какое-то специфическое поле, а обычное, по-которому вы будете отделять данные одного пользователя от другого. Об этом же писал "Кот Матроскин"

"одна таблица c заранее заданным именем с дополнительной колонкой "пользователь"."

В его примере он использует номер сессии @@SPID - так надежнее. В вашем случае, подумайте, чот произойдет если будет запущено два экземпляра приложения под одним пользователем.
11 сен 14, 10:18    [16562637]     Ответить | Цитировать Сообщить модератору
 Re: Определить кол-во записей из временой таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
tasha klemer
а можно подробнее про этот вариант с полем System_user , или ссылку на подобную статью.

"статья" называется хелп по MS SQL Server
http://msdn.microsoft.com/en-us/library/ms179930.aspx
11 сен 14, 10:20    [16562650]     Ответить | Цитировать Сообщить модератору
 Re: Определить кол-во записей из временой таблицы  [new]
baracs
Member

Откуда: Москва
Сообщений: 7204
tasha klemer
А чем плохи глобальные таблицы?
тем, что вам приходится заниматься этой фигней:
set @mytable ='##TNetBild'+ SYSTEM_USER
Кроме того, во временных таблицах нельзя использовать внешние ключи.
tasha klemer
какой вариант есть для записей которые были в базе и их редактировали или вообще какая то информация была удалена из части таблиц, как здесь можно откатить на начальные данные!
Если коротко: управлять версиями строк. Можно использовать для этого встроенные механизмы СУБД, можно изобретать свои. Задача непростая.
Например, как ваша система будет себя вести, если два пользователя одновременно изменяют одни и те же данные?
11 сен 14, 11:02    [16562809]     Ответить | Цитировать Сообщить модератору
 Re: Определить кол-во записей из временой таблицы  [new]
Jovanny
Member

Откуда:
Сообщений: 1195
tasha klemer,

А может просто используете Entity Framework и забудете программирование на T-SQL как страшный сон?
11 сен 14, 11:32    [16562917]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить