Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Снова вопрос о 'CashedUpdates' в ADO / 4 сообщений из 4, страница 1 из 1
26.08.2002, 14:41:04
    #32045880
harrytv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова вопрос о 'CashedUpdates' в ADO
При переводе клиента с BDE (StoredProc + UpdateSQL) столкнулся с невозможностью прямого перевода программы под ADO.
Существует некий список документов, получаемый из SP(сложный SELECT) и куча справочников с тем же подходом. Документ на сервер добавляет(изменяет,удаляет) соответствующая SP, после чего в DataSet'е прямо прописываются новые значения полей (StoredProc.CashedUpdates:=True ...).
ADO кеширования не позволяет, после открытия списка
засасывает метаданные(о ключах, выч. полях и т.д.).
При добавлении записи ADO самостоятельно формирует
INSERT, изменить значение ключевых полей в RecordSet'e
не дает,что правильно при его логике работы, но мне не нужно.
Выхода вижу два
1. ClientDataSet - что-то не нравится ...
2. В SP :
Код: plaintext
1.
2.
3.
4.
CREATE #Table (a,b,c)
SELECT  a,b,c INTO #Table FROM ...
SELECT * FROM #Table
DROP TABLE #Table
RETURN

При такой SP ADO свои INSERT'ы не формирует(хотелось бы знать почему), поля могу править как хочу.

Вопрос: есть ли минусы у такой активной работы с временными таблицами (блокирование tempdb и т.п.)
...
Рейтинг: 0 / 0
26.08.2002, 18:19:37
    #32045951
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова вопрос о 'CashedUpdates' в ADO
Предпосылка "ADO кеширования не позволяет" в корне неверна. LockType:=ltBatchOptimistic и любой самый неживой запрос становиться живым. При этом запросы на обновление insert/update/delete можно сформировать и отправить на сервер самому.

> есть ли минусы у такой активной работы с временными таблицами (блокирование tempdb и т.п.)

Это совершенно нормально при работе с MSSQL. О блокировании tempdb можно позабыть, это кануло в историю вместе с MSSQL6.5

> При такой SP ADO свои INSERT'ы не формирует(хотелось бы знать почему)

Догадаться легко - вставлять некуда, так как временная табличка не существует после окончания выполнения процедуры. К тому же, корректные запросы на обновление автоматика построить может только в простейших случаях.
...
Рейтинг: 0 / 0
26.08.2002, 20:02:25
    #32045973
Robert Djabarov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова вопрос о 'CashedUpdates' в ADO
First, if you do a CREATE TABLE, then you don't need to do SELECT ... INTO, because the latter is supposed to create a table on the fly, while you already have it.

Second, TEMPDB can be blocked if you don't use CREATE TABLE, but do your "on-the-fly" creation via SELECT ... INTO. If the SELECT statement returns a large resultset, sysobjects, syscolumns, and sysindexes tables in TEMPDB will have UPDATE lock lpaced on them until your temporary table is fully populated.

Third, the best approach is to do the following:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin tran
create table #Table (a, b, c)
if @@error !=  0  begin
   raiserror ('Failed to create temp. table!',  15 ,  1 )
   rollback tran
   return ( 1 )
end
commit tran

select * from #Table
return ( 0 )
...
Рейтинг: 0 / 0
27.08.2002, 15:04:06
    #32046208
harrytv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Снова вопрос о 'CashedUpdates' в ADO
2Dankov
1. Спасибо, с LockType, то что нужно...
2. Что за команда SET NO_BROWSETABLE OFF/ON выполняется сервером при каждом моем вызове SP на добавление при просмотре profiler'om?
3. Как бы еще избавиться от except'ов при попытке самому прописать значение в ключевое(или вычисляемое) поле. Где в полях этот признак и можно ли его изменить? Может пусть клиент сам дергает с сервера новые записи по-одной?

2Robert Djabarov
Да, у меня опечатка:
Код: plaintext
1.
2.
3.
CREATE #Table (a,b,c)
INSERT a,b,c INTO #Table SELECT * FROM ...
SELECT * FROM #Table
DROP TABLE #Table

Проверку вставлю, спасибо за совет.
Еще один вопрос. Какие select'ы считать большими. Или от противного, можно ли 100-200 записей из 2-3 полей считать маленьким?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Снова вопрос о 'CashedUpdates' в ADO / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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