Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Gerasimenko Member Откуда: Сообщений: 4643 |
Есть ХП. 1) Внутри ХП 1 используются курсоры с вызовом другой ХП 2, у которой в свою очередь есть параметр, который определяет, нужно ли возвращать набор записей. 2) Внутри ХП 2 используются временные таблицы. 3) Внутри ХП 2 в конце такая конструкция IF @IsResultSelect = 0 SELECT Вопрос: почему, если при первом вызове ХП 2 не возвращать набор записей, то вываливается ошибка о ненахождении полей из этой процедуры? Если же один раз вернуть значения, то потом все работает "как часы"? MSSQL2008 R2 |
18 апр 18, 16:54 [21349608] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
|
||
18 апр 18, 16:55 [21349616] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Gerasimenko,
может ошибку не пересказывая? |
||
18 апр 18, 16:59 [21349636] Ответить | Цитировать Сообщить модератору |
Gerasimenko Member Откуда: Сообщений: 4643 |
В таблице такой-то не найдено поле такое то. Из первого же запроса в ХП 2 |
||||
18 апр 18, 17:05 [21349666] Ответить | Цитировать Сообщить модератору |
Gerasimenko Member Откуда: Сообщений: 4643 |
Из студии |
||||
18 апр 18, 17:05 [21349673] Ответить | Цитировать Сообщить модератору |
Gerasimenko Member Откуда: Сообщений: 4643 |
Msg 207, Level 16, State 1, Procedure fGetReportOpenDay_1_203, Line 52 Invalid column name 'IsGroup'. Msg 207, Level 16, State 1, Procedure fGetReportOpenDay_1_203, Line 52 Invalid column name 'TypeRow'. и т.д. |
||||
18 апр 18, 17:07 [21349679] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Gerasimenko, а временные таблицы создаете поди SELECT ... INTO #table FROM ? |
18 апр 18, 17:09 [21349684] Ответить | Цитировать Сообщить модератору |
Gerasimenko Member Откуда: Сообщений: 4643 |
|
||
18 апр 18, 17:10 [21349690] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
решение очевидно? :) ну и в вашей хп1 судя по всему есть таблица с таким же именем |
||||
18 апр 18, 17:11 [21349692] Ответить | Цитировать Сообщить модератору |
Gerasimenko Member Откуда: Сообщений: 4643 |
Нет. Одинаковых нет. DROP TABLE # так же присутствует. И мне не нужен возврат результатов в данном случае. |
||||
18 апр 18, 17:13 [21349695] Ответить | Цитировать Сообщить модератору |
Gerasimenko Member Откуда: Сообщений: 4643 |
Или вы не о темповых таблицах? |
||||
18 апр 18, 17:14 [21349701] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
продолжайте фантазировать |
||||
18 апр 18, 17:14 [21349702] Ответить | Цитировать Сообщить модератору |
Gerasimenko Member Откуда: Сообщений: 4643 |
|
||||
18 апр 18, 17:15 [21349707] Ответить | Цитировать Сообщить модератору |
Gerasimenko Member Откуда: Сообщений: 4643 |
Да, был фантазером и мечтателем (не Кремлевским :) ) Большое спасибо: затесалась-таки темповая таблица с одинаковым именем. После присвоения уникального имени: все заработало. Еще раз большое спасибо!!! |
||||
18 апр 18, 17:24 [21349741] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
првильное решение это не прибить "вторую", а создавать объект через CREATE TABLE #table, а не как у вас |
||||
18 апр 18, 17:25 [21349746] Ответить | Цитировать Сообщить модератору |
Gerasimenko Member Откуда: Сообщений: 4643 |
Много полей и много промежуточных результатов. МСДН не запрещает такой вариант. |
||||
18 апр 18, 17:27 [21349755] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
мда... "Следующий" |
||||
18 апр 18, 17:28 [21349761] Ответить | Цитировать Сообщить модератору |
Gerasimenko Member Откуда: Сообщений: 4643 |
Тупо НЕвнимательность (усталость). Идентификаторы решают эти проблемы. |
||||
18 апр 18, 17:29 [21349764] Ответить | Цитировать Сообщить модератору |
Gerasimenko Member Откуда: Сообщений: 4643 |
Идентификатор 203, обеспечивающий уникальность. #tmpName_203 уникальна |
||||||
18 апр 18, 17:32 [21349785] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
продолжайте фантазировать вот схема вашей ошибки CREATE PROC dbo.b AS SELECT 1 as Id INTO #a SELECT * FROM #a UPDATE #a SET Id = 2 GO CREATE PROC dbo.a AS CREATE TABLE #a (S INT) EXEC dbo.b GO EXEC dbo.a DROP PROC dbo.b DROP PROC dbo.a |
||||||
18 апр 18, 17:38 [21349818] Ответить | Цитировать Сообщить модератору |
Gerasimenko Member Откуда: Сообщений: 4643 |
Только честно: Вы всегда делаете Create table #NameTable ? p.s. Нет, это не фантазии. И да, в конце процедуры b есть Drop table #a. |
||||
18 апр 18, 18:07 [21349926] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37143 |
Кто не хочет собирать грабли, вроде ваших, тот делает.
Вот так, к примеру, уже работает: CREATE PROC dbo.b AS SELECT 1 as Id INTO #a SELECT * FROM #a execute ('UPDATE #a SET Id = 2') select * from #a GO CREATE PROC dbo.a AS CREATE TABLE #a (S INT) EXEC dbo.b select * from #a GO EXEC dbo.a DROP PROC dbo.b DROP PROC dbo.a |
||||
18 апр 18, 18:12 [21349941] Ответить | Цитировать Сообщить модератору |
Gerasimenko Member Откуда: Сообщений: 4643 |
Да понял я. И изначально был уверен, что имя темповой таблицы уникально. 21349695 Но промахнулся. В моем случае, меня вполне устраивает данный вариант. Ошибка исключена. |
||||
18 апр 18, 18:17 [21349959] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
да всегда, это избавляет от массы проблем. И отгораживание какими-то придуманными идентификаторами вызывает только тошноту
"папа а дэ море" |
||||||
18 апр 18, 21:40 [21350389] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |