Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Проблема с временными таблицами. Только у меня? (число прочтений - 8319 )
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Проблема с временными таблицами. Только у меня
Ответ #15 - 14. Февраля 2008 :: 12:39
Печать  
berezdetsky писал(а) 14. Февраля 2008 :: 10:27:
Проблема в том, что в SQL-коде этого тестового примера есть ошибка (set nocount on на уровне подключения). Просто в RPCMode она проявляется раньше. А пропадание таблицы - следствие (одно из).


Отсюда поподробнее объясни свою мысль. Чем тебе Set NoCount On помешал?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Проблема с временными таблицами. Только у меня
Ответ #16 - 14. Февраля 2008 :: 13:05
Печать  
berezdetsky писал(а) 14. Февраля 2008 :: 12:19:
Z1 писал(а) 14. Февраля 2008 :: 11:40:
А зачем вообще использовать  set nocount on ?

http://www.1cpp.ru/forum/YaBB.pl?num=1164026472/1#1

В моем варианте текст запроса будет содержать единственную инструкцию.
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Проблема с временными таблицами. Только у меня
Ответ #17 - 14. Февраля 2008 :: 13:09
Печать  
Z1 писал(а) 14. Февраля 2008 :: 13:05:
В моем варианте текст запроса будет содержать единственную инструкцию.


Не дай Бог, схлопочешь варнинг - без Set NoCount ON повалишь 1С-ну.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Проблема с временными таблицами. Только у меня
Ответ #18 - 14. Февраля 2008 :: 13:22
Печать  
sadovnikov писал(а) 14. Февраля 2008 :: 13:09:
Z1 писал(а) 14. Февраля 2008 :: 13:05:
В моем варианте текст запроса будет содержать единственную инструкцию.


Не дай Бог, схлопочешь варнинг - без Set NoCount ON повалишь 1С-ну.

Это если использовать метод ВыполнитьИнструкцию() ,
для метода ВыполнитьСкалярный()  ИХМО должно все правильно работать.
по   крайней мере у меня такой код используется ( правда он редко выполняется )
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с временными таблицами. Только у меня
Ответ #19 - 14. Февраля 2008 :: 13:33
Печать  
sadovnikov писал(а) 14. Февраля 2008 :: 12:39:
Отсюда поподробнее объясни свою мысль. Чем тебе Set NoCount On помешал?

Объясняю подробнее. Вадимко включает эту настройку на уровне подключения и не отключает в конце батча. Соответственно, начинают возникать побочные эффекты в использущем это подключение коде, который не предусматривает такой настройки.
Вставь set nocount off в конце каждого батча в коде примера, и ошибки не станет.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Проблема с временными таблицами. Только у меня
Ответ #20 - 14. Февраля 2008 :: 13:38
Печать  
Z1 писал(а) 14. Февраля 2008 :: 13:22:
Это если использовать метод ВыполнитьИнструкцию() ,
для метода ВыполнитьСкалярный()  ИХМО должно все правильно работать.
по   крайней мере у меня такой код используется ( правда он редко выполняется )


Ага, был не прав. ВыполнитьСкалярный() правильно отрабатывает.
Видать, перепутал с:
ЗапросСКЛ.Выполнить("SELECT IDDoc FROM _1SJourn Журн (nolock)");
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Проблема с временными таблицами. Только у меня
Ответ #21 - 14. Февраля 2008 :: 13:43
Печать  
berezdetsky писал(а) 14. Февраля 2008 :: 13:33:
Объясняю подробнее. Вадимко включает эту настройку на уровне подключения и не отключает в конце батча. Соответственно, начинают возникать побочные эффекты в использущем это подключение коде, который не предусматривает такой настройки.
Вставь set nocount off в конце каждого батча в коде примера, и ошибки не станет.


Неправда ваша, батенька...
1. Ошибка, озвученная в (0), все равно останется.
2. Везде использую Set NoCount On и ни разу не нарвался на какие-либо проблемы из-за этого. А вот без Set NoCount On - проблем хоть ложкой ешь.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с временными таблицами. Только у меня
Ответ #22 - 14. Февраля 2008 :: 13:49
Печать  
sadovnikov писал(а) 14. Февраля 2008 :: 13:43:
Неправда ваша, батенька...
1. Ошибка, озвученная в (0), все равно останется.

см. аттач.

sadovnikov писал(а) 14. Февраля 2008 :: 13:43:
2. Везде использую Set NoCount On и ни разу не нарвался на какие-либо проблемы из-за этого. А вот без Set NoCount On - проблем хоть ложкой ешь.

И чем это противоречит моим словам?

  

testqry.ert ( 56 KB | Загрузки )

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Проблема с временными таблицами. Только у меня
Ответ #23 - 14. Февраля 2008 :: 13:55
Печать  
berezdetsky писал(а) 14. Февраля 2008 :: 13:49:
sadovnikov писал(а) 14. Февраля 2008 :: 13:43:
Неправда ваша, батенька...
1. Ошибка, озвученная в (0), все равно останется.

см. аттач.


Нифига себе ты юморист...
1. Сделай Сообщить(ЗапросСКЛ.Выполнить(ТекстЗапроса)); и полюбуйся, как оно тебе 0 вернет.
2. Все-таки выполни последний запрос, а не просто напиши его текст.

berezdetsky писал(а) 14. Февраля 2008 :: 13:49:
sadovnikov писал(а) 14. Февраля 2008 :: 13:43:
2. Везде использую Set NoCount On и ни разу не нарвался на какие-либо проблемы из-за этого. А вот без Set NoCount On - проблем хоть ложкой ешь.

И чем это противоречит моим словам?



Вот с этим:
"Соответственно, начинают возникать побочные эффекты в использущем это подключение коде, который не предусматривает такой настройки.
Вставь set nocount off в конце каждого батча в коде примера, и ошибки не станет. "
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с временными таблицами. Только у меня
Ответ #24 - 14. Февраля 2008 :: 14:17
Печать  
sadovnikov писал(а) 14. Февраля 2008 :: 13:55:
Нифига себе ты юморист...
1. Сделай Сообщить(ЗапросСКЛ.Выполнить(ТекстЗапроса)); и полюбуйся, как оно тебе 0 вернет.
2. Все-таки выполни последний запрос, а не просто напиши его текст.

Ой. Смущённый Все эти Выполнить остались из исходного варианта начала топика. Беру таймаут.  Нерешительный

sadovnikov писал(а) 14. Февраля 2008 :: 13:55:
berezdetsky писал(а) 14. Февраля 2008 :: 13:49:
sadovnikov писал(а) 14. Февраля 2008 :: 13:43:
2. Везде использую Set NoCount On и ни разу не нарвался на какие-либо проблемы из-за этого. А вот без Set NoCount On - проблем хоть ложкой ешь.

И чем это противоречит моим словам?

Вот с этим:
"Соответственно, начинают возникать побочные эффекты в использущем это подключение коде, который не предусматривает такой настройки."

Не вижу противоречия. И считаю плохой практикой менять параметры чужого подключения.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Проблема с временными таблицами. Только у меня
Ответ #25 - 14. Февраля 2008 :: 14:25
Печать  
berezdetsky писал(а) 14. Февраля 2008 :: 14:17:
И считаю плохой практикой менять параметры чужого подключения.


А вот тут согласен. Но, тогда уж предварительно считываь эти самые параметры. Чтобы потом вернуть именно в то, что было изначально.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Проблема с временными таблицами. Только у меня
Ответ #26 - 14. Февраля 2008 :: 15:29
Печать  
off для этой темы
Хотелка для 1cpp
может имеет смысл выделить все архаичные методы объекта recordset
( Выполнить,УстТипыКолонок1С,Открыть ...)
в отдельную dll ( например 1cpp_arxiv.dll ) и исключить эти методы из
основной  библитотеки 1cpp.dll. Тогда кому нужно использовать
старые методы должен будет выполнить новый Метод Подгрузить("1cpp_arxiv.dll");
Т.е. создадим первый плагин для 1cpp к чему давно призывает Uzhast
плюсы этой хотелки
1. 1cpp.dll станет меньше занимать памяти.
2. труднее будет применять старые методы (особенно в новом коде).
3. новичкам будет легче осваивать 1сpp, а то довольно сложно разобраться
прчему и какой метод надо использовать Выполнить или ВыполнитьСкалярный
минусы
1. из-за другого распределения памяти могут
всплыть "работающие правильно" программы в виде непредвиденных ошибок
(хотя может это и плюс)
2. надо все это сделать и  изменить документацию.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с временными таблицами. Только у меня
Ответ #27 - 14. Февраля 2008 :: 16:17
Печать  
berezdetsky писал(а) 14. Февраля 2008 :: 14:17:
Беру таймаут.  Нерешительный

Попытка № 3.
  • RPCMode заворачивает запросы в вызовы процедуры sp_executesql.
  • sp_executesql выполняет свои запросы в контексте хранимой процедуры (SP:StmtStarting/SP:StmtCompleted).
  • Цитата:
    A local temporary table created in a stored procedure is dropped automatically when the stored procedure completes.
    (c) BOL

Т.о. имеем штатное поведение. Решение записано выше:
berezdetsky писал(а) 09. Февраля 2008 :: 13:29:
Там ведь достаточно было создать таблицу не в режиме RPC..


По этой же причине в данном случае не возникает проблем с set nocount on - внутри процедуры установка действует до конца процедуры.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Проблема с временными таблицами. Только у меня
Ответ #28 - 15. Февраля 2008 :: 04:33
Печать  
Вообщем все ок. Спроблемой из (0) полностью разобрались.
Как бы небольшой итог:
1. sql операторы создающие таблицы CREATE ( в том числе и временные ) не надо
создавать в RPC(1).
2. для создания sql таблицы предпочтительнее использовать метод
ВыполнитьСкалярный()

  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Проблема с временными таблицами. Только у меня
Ответ #29 - 15. Февраля 2008 :: 04:35
Печать  
berezdetsky писал(а) 14. Февраля 2008 :: 16:17:
Т.о. имеем штатное поведение. Решение записано выше:
[quote author=berezdetsky link=1202473360/0#8 date=1202563777]Там ведь достаточно было создать таблицу не в режиме RPC..


Как ты правильно указал, все это было понято гораздо выше Улыбка

berezdetsky писал(а) 14. Февраля 2008 :: 16:17:
По этой же причине в данном случае не возникает проблем с set nocount on - внутри процедуры установка действует до конца процедуры.


Ну не возникает в 1С проблем из-за использования set nocount on... А вовсе даже наоборот...
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать