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

Откуда:
Сообщений: 1379
Добрый вечер (ночь, утро, день)...
Вот такая тема - пишу прогу на Delphi XE. Запросов много (MS SQL Server 2005) и некоторые из них достаточно длинные - решил их разбить и растусовать по временным таблицам...
Сделал это...

Стали некоторые из запросов маленькие, но уже под вечер мозг не так работает, как утром, поэтому даже в таком маленьком запросе визуально ошибка не просматривается - Столбец M для z1 указан более одного раза - вот такая вот ошибка....
А вопрос такой: Как можно эту беду открыть в SQL Manager Studio таким образом, чтобы был доступ к временным таблицам - в дереве объектов я их вижу, но студия ругается, что их надо создать... А без них запроса не отладить... А как-нибудь их воссоздать в студии - надо время и желание, но чую, что есть правильное и грамотное решение - как можно без заморочек этот запрос открыть в манагер студии?
INSERT #FInter_Z
SELECT
    M= CASE WHEN z.M IS NULL THEN z1.M ELSE z.M END
   ,cZKol
   ,pZKol
   ,Id = CASE WHEN z.Id IS NULL THEN z1.Id ELSE z.ID END
   ,PColourId = CASE WHEN z.PColourId IS NULL THEN z1.PColourId ELSE z.PColourId END
FROM (
     SELECT z.M
		         ,z1.M
		         ,tKol  AS cZKol
		         ,pZKol
	        	 ,z.Id
	        	 ,z1.Id
	        	 ,z.PColourId
	           ,z1.PColourId
     FROM #Inter_Z AS z
     FULL JOIN (
   		         SELECT M	
   			              ,tKol  AS pZKol
   			              ,Id
   			              ,PColourId
   		         FROM #Prev_Inter_Z) AS z1	
     ON z1.M=z.M AND z1.Id=z.Id AND z1.PColourId=z.PColourId
) AS z1


Заранее гигантский сэнкс!
5 дек 12, 18:26    [13583577]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
philips
Member

Откуда:
Сообщений: 365
Galadriel75,
Ну так надо добавить запросы на создание этих временных таблиц
5 дек 12, 18:29    [13583594]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Galadriel75
Member

Откуда:
Сообщений: 1379
philips
Galadriel75,
Ну так надо добавить запросы на создание этих временных таблиц

про это я в курсе, так запросов много - неужели все воссоздавать в студии? - запросы плодит прога, в которой они прописаны в строковой переменной с кучей конкатенаций... некоторые из них вываливаются в текстовый файл... и чтоб найти крохотную ошибку - влом рисовать их в студии, типа открывать текстовики с сохраненными прогой запросами, пихать их в студию а потом после всего этого фиксить баг?
то есть для поиска одной ошибки тратить время на создание условий для отладки? скорее всего это не есть гуд :)...
5 дек 12, 18:32    [13583612]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
алиасы проставте в своих запросах и будет вам минимальное счастье
5 дек 12, 18:33    [13583617]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Galadriel75
Member

Откуда:
Сообщений: 1379
Maxx
алиасы проставте в своих запросах и будет вам минимальное счастье

как это сделать-то?
5 дек 12, 18:36    [13583631]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
   SELECT     z.M
		         ,z1.M1
		         ,tKol  AS cZKol
		         ,pZKol
	        	 ,z.Id
	        	 ,z1.Id1
	        	 ,z.PColourId
	           ,z1.PColourId
     FROM #Inter_Z AS z
     FULL JOIN (
   		         SELECT  m1 = M	
   			              ,tKol  AS pZKol
   			              ,id1 = Id
   			              ,PColourId
   		         FROM #Prev_Inter_Z) AS z1	
     ON z1.M1=z.M AND z1.Id1=z.Id AND z1.PColourId=z.PColourId
) AS z1



дето так
5 дек 12, 18:39    [13583644]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Galadriel75
Member

Откуда:
Сообщений: 1379
Maxx
   SELECT     z.M
		         ,z1.M1
		         ,tKol  AS cZKol
		         ,pZKol
	        	 ,z.Id
	        	 ,z1.Id1
	        	 ,z.PColourId
	           ,z1.PColourId
     FROM #Inter_Z AS z
     FULL JOIN (
   		         SELECT  m1 = M	
   			              ,tKol  AS pZKol
   			              ,id1 = Id
   			              ,PColourId
   		         FROM #Prev_Inter_Z) AS z1	
     ON z1.M1=z.M AND z1.Id1=z.Id AND z1.PColourId=z.PColourId
) AS z1



дето так

а разве я в самом первом запросе (после AS) не ставил их?
5 дек 12, 18:44    [13583670]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Galadriel75,

ну или они не попали в первый пост или их таки там нет
5 дек 12, 18:49    [13583695]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
kain111
Member

Откуда:
Сообщений: 227
автор
типа открывать текстовики с сохраненными прогой запросами, пихать их в студию а потом после всего этого фиксить баг?

Если я правильно понял. то мне кажется только так и получится. либо в программе как то ошибки запросов обрабатывать.
6 дек 12, 10:17    [13585831]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Galadriel75
А без них запроса не отладить... А как-нибудь их воссоздать в студии - надо время и желание, но чую, что есть правильное и грамотное решение - как можно без заморочек этот запрос открыть в манагер студии?

Типа взял текст запрос и отладил его на любом сервере.
Пусть сервер сам придумает, откуда ему взять объекты, участвующие в запросе.
6 дек 12, 10:24    [13585868]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31905
Galadriel75
и чтоб найти крохотную ошибку - влом рисовать их в студии, типа открывать текстовики с сохраненными прогой запросами, пихать их в студию а потом после всего этого фиксить баг?
то есть для поиска одной ошибки тратить время на создание условий для отладки? скорее всего это не есть гуд :)...
Да, именно так.

Можно ещё ловить текст в профайлере.
6 дек 12, 10:32    [13585935]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Galadriel75
Member

Откуда:
Сообщений: 1379
Glory
Galadriel75
А без них запроса не отладить... А как-нибудь их воссоздать в студии - надо время и желание, но чую, что есть правильное и грамотное решение - как можно без заморочек этот запрос открыть в манагер студии?

Типа взял текст запрос и отладил его на любом сервере.
Пусть сервер сам придумает, откуда ему взять объекты, участвующие в запросе.

Ну так объекты же есть - они в дереве видны - когда я выполняю запрос, и сервер кричит что нет временных таблиц - я эти временные таблицы вижу в дереве объектов... хотя ... хотя они могут быть созданы другими клиентами - прога вращается на нескольких компах - вот скорее всего я и вижу те недоступные таблицы, которые созданы в "не моей" сессии и сервак справедливо возмущается. Поэтому я решил сделать вот как:
1. или доделать собственный отладчик - компонентов с подсветкой синтаксиса - лавина, тока не знаю, как у ADO выпросить номер строки, в которой произошла ошибка
2 или все запросы сливать в один единственный XML файл, который будет формироваться исключительно на моей машинке - нахрена он юзерам. А потом крохотная программка прошерстит нужные тэги и вытянет все, что необходимо для комфортной отладки в студии - и как итог - чтобы сделать отладку - просто альттабом перейти в студию и вывалить из буфера обмена все его содержимое... - наверно это будет метод наименьшего гемороя...
6 дек 12, 10:43    [13586020]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Galadriel75
Member

Откуда:
Сообщений: 1379
alexeyvg
Galadriel75
и чтоб найти крохотную ошибку - влом рисовать их в студии, типа открывать текстовики с сохраненными прогой запросами, пихать их в студию а потом после всего этого фиксить баг?
то есть для поиска одной ошибки тратить время на создание условий для отладки? скорее всего это не есть гуд :)...
Да, именно так.

Можно ещё ловить текст в профайлере.

а это еще что такое и как делается? (как прокурить тему в гугле?)
6 дек 12, 10:44    [13586027]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31905
Galadriel75
а это еще что такое и как делается? (как прокурить тему в гугле?)
Это средство отслеживаня всего, что выполняется на сиквеле

Покурить лучше в документации; удобнее в локальной, но есть и в инете: http://msdn.microsoft.com/ru-ru/library/ms181091(v=sql.90).aspx
6 дек 12, 10:50    [13586088]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104751
Galadriel75
Ну так объекты же есть - они в дереве видны - когда я выполняю запрос, и сервер кричит что нет временных таблиц - я эти временные таблицы вижу в дереве объектов... хотя

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

Galadriel75
1. или доделать собственный отладчик - компонентов с подсветкой синтаксиса - лавина, тока не знаю, как у ADO выпросить номер строки, в которой произошла ошибка

Не изобретайте велосипед.
Все уже давно изобретено. Профайлер замечательно трассирует все события сервера. Включая серверные ошибки.
6 дек 12, 10:52    [13586104]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Galadriel75
Member

Откуда:
Сообщений: 1379
alexeyvg
Galadriel75
а это еще что такое и как делается? (как прокурить тему в гугле?)
Это средство отслеживаня всего, что выполняется на сиквеле

Покурить лучше в документации; удобнее в локальной, но есть и в инете: http://msdn.microsoft.com/ru-ru/library/ms181091(v=sql.90).aspx

ок спасибо - посмотрю...!
6 дек 12, 11:18    [13586382]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Galadriel75
Member

Откуда:
Сообщений: 1379
Glory
Galadriel75
Ну так объекты же есть - они в дереве видны - когда я выполняю запрос, и сервер кричит что нет временных таблиц - я эти временные таблицы вижу в дереве объектов... хотя

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

Galadriel75
1. или доделать собственный отладчик - компонентов с подсветкой синтаксиса - лавина, тока не знаю, как у ADO выпросить номер строки, в которой произошла ошибка

Не изобретайте велосипед.
Все уже давно изобретено. Профайлер замечательно трассирует все события сервера. Включая серверные ошибки.

посмотрю в сторону профайлера... спасибо!
6 дек 12, 11:19    [13586402]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Galadriel75
Поэтому я решил сделать вот как:
1. или доделать собственный отладчик
2 или все запросы сливать в один единственный XML файл

Можно все запросы вынести в хранимые процедуры и вызывать их с клиента. Отладка для SQL Server при этом существенно упрощается.
6 дек 12, 11:55    [13586814]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
sld
Member

Откуда: ага
Сообщений: 313
если переименовать z1 в z3 в последней строчке и соотвественно в селекте, думаю ошибка исчезнет.
6 дек 12, 11:59    [13586862]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Гость333
Member

Откуда:
Сообщений: 3683
sld
если переименовать z1 в z3 в последней строчке и соотвественно в селекте, думаю ошибка исчезнет.

Думаю, что не исчезнет, ибо
SELECT z.M
		         ,z1.M
6 дек 12, 12:12    [13586994]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
автор
Столбец M для z1 указан более одного раза - вот такая вот ошибка....


ну так у вас и правда он указан более одного раза
 SELECT z.M,
            z1.M


напишите

 SELECT z.M as Z_M
		         ,z1.M as Z1_M

и ошибка уйдет
6 дек 12, 12:19    [13587065]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Galadriel75
Member

Откуда:
Сообщений: 1379
Гость333
Galadriel75
Поэтому я решил сделать вот как:
1. или доделать собственный отладчик
2 или все запросы сливать в один единственный XML файл

Можно все запросы вынести в хранимые процедуры и вызывать их с клиента. Отладка для SQL Server при этом существенно упрощается.



Супер! Спасибо! Вариант!
6 дек 12, 12:26    [13587146]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Galadriel75
Member

Откуда:
Сообщений: 1379
Кот Матроскин
автор
Столбец M для z1 указан более одного раза - вот такая вот ошибка....


ну так у вас и правда он указан более одного раза
 SELECT z.M,
            z1.M


напишите

 SELECT z.M as Z_M
		         ,z1.M as Z1_M

и ошибка уйдет

спасибо! попробую!
6 дек 12, 12:27    [13587159]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Galadriel75,

ето и называеться алиасы для колонок
6 дек 12, 12:31    [13587197]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Galadriel75
Member

Откуда:
Сообщений: 1379
Maxx
Galadriel75,

ето и называеться алиасы для колонок


ясно-ясно! спасибо!!!
6 дек 12, 13:39    [13587877]     Ответить | Цитировать Сообщить модератору
 Re: Как можно проверить запрос, в котором временные таблицы  [new]
Galadriel75
Member

Откуда:
Сообщений: 1379
Galadriel75
Кот Матроскин
пропущено...


ну так у вас и правда он указан более одного раза
 SELECT z.M,
            z1.M


напишите

 SELECT z.M as Z_M
		         ,z1.M as Z1_M

и ошибка уйдет

спасибо! попробую!

спасибо! ошибка ушла.... на свежий мозг я как-то быстро понаходмл кучку аналогичных ошибок :)
17 дек 12, 11:53    [13641656]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft SQL Server Ответить