Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Msg 0, Level 11, State 0, Line 0  [new]
)))
Guest
просто для информации сюда помещаю, вдруг кому пригодится.
вывалилось мне впервые в жизни такое вот жутко информативное сообщение.

Msg 0, Level 11, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.


всего-то делаю INSERT EXEC,
причем в таблицу, давно уже созданную под именно эту процедуру,
куда уже неоднократно процедура данные отгружала.
гугл на такое выдает проблемы с индексами,
а у меня вставка в кучу.
мозг сломать можно, но доперло.

т.к. у нас проходной двор,
сверила структуру таблицы с выходным резалтсетом процедуры.
ага, испарилось поле из таблицы.

короче. если процедурой возвращается больше полей, чем в таблице,
об этом сообщается таким вот интересным способом %)
23 янв 13, 13:06    [13814825]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Версия сервера?
23 янв 13, 13:12    [13814877]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Еще и не такое может происходить в серверах неизвестной версии.
23 янв 13, 13:13    [13814887]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
Glory
Member

Откуда:
Сообщений: 104760
)))
короче. если процедурой возвращается больше полей, чем в таблице,
об этом сообщается таким вот интересным способом %)


create table #x(spid int, ecid int, status varchar(50))
insert #x
exec sp_who

go
drop table #x

Server: Msg 213, Level 16, State 7, Procedure sp_who, Line 76
Insert Error: Column name or number of supplied values does not match table definition.

что я делаю не так ?
23 янв 13, 13:16    [13814926]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
)))
Guest
Гавриленко Сергей Алексеевич
Еще и не такое может происходить в серверах неизвестной версии.


Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2) (Hypervisor)
23 янв 13, 13:19    [13814944]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
)))
Guest
Glory
)))
короче. если процедурой возвращается больше полей, чем в таблице,
об этом сообщается таким вот интересным способом %)


create table #x(spid int, ecid int, status varchar(50))
insert #x
exec sp_who

go
drop table #x

Server: Msg 213, Level 16, State 7, Procedure sp_who, Line 76
Insert Error: Column name or number of supplied values does not match table definition.

что я делаю не так ?


ээээээ...
не знаю, что и сказать, завесить картинку? у меня до сих пор воспроизводится
23 янв 13, 13:25    [13815004]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
Glory
Member

Откуда:
Сообщений: 104760
)))
не знаю, что и сказать, завесить картинку? у меня до сих пор воспроизводится

Картинка не поможет мне воспроизвести ситуацию на своем сервере.
23 янв 13, 13:33    [13815067]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
)))
Guest
люди, ну подскажите, как еще-то воспроизвести.
та же процедура без вставки в таблицу отдает результат.
как только вставляю (и колонок больше, чем в таблице), вылазит эта фигня
23 янв 13, 13:50    [13815191]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
Гость333
Member

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

Попробуйте посмотреть через профайлер, нет ли перед этим "Msg 0" ещё каких-нибудь ошибок.
23 янв 13, 14:02    [13815287]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
Glory
Member

Откуда:
Сообщений: 104760
)))
люди, ну подскажите, как еще-то воспроизвести.

Взять и написать скрипт, который
- создаст чистую базу
- нужные объекты в ней
- нужные данные в объектах
- вызовет процедуру с озвученной ошибкой
23 янв 13, 14:07    [13815325]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
Crimean
Member

Откуда:
Сообщений: 13148
к сведению! "INSERT EXEC" реально "душит" сообщения
давняя бага, впрочем всем в MS давно и прочно "до лампы"
"такое" может быть не только по указанной причине - несовпадение колонок
если что - "устриц ел"
23 янв 13, 14:09    [13815348]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
)))
Guest
Гость333
))),

Попробуйте посмотреть через профайлер, нет ли перед этим "Msg 0" ещё каких-нибудь ошибок.


у меня нету ALTER TRACE и вообще прав уровня сервера нету.

to Glory:
пробовала с меньшим числом колонок, не катит.
сейчас попробую воссоздать как есть с пустыми таблицами и если то же самое,
то тут скрипт выложу
23 янв 13, 14:16    [13815399]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
)))
Guest
вот. воспроизводится на другом сервере.
извиняюсь за размеры
23 янв 13, 14:34    [13815542]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
)))
Guest


К сообщению приложен файл (qqq_db.sql - 27Kb) cкачать
23 янв 13, 14:34    [13815550]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
Гость333
Member

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

У меня воспроизвелось на версиях 9.00.5057.00 и 10.50.2550.0.

Упрощённая версия:
create procedure dbo.select_1
as
begin try
  select 1 as id;
end try
begin catch
  select error_message();
end catch;
go

declare @t table (id int, a int);
insert @t exec dbo.select_1


Профайлер показывает, что сначала происходит "select 1 as id". Затем возникает ошибка 213 "Column name or number of supplied values does not match table definition". И эту ошибку 213 перехватывает блок catch в хранимой процедуре! После чего, видимо, серверу окончательно сносит крышу, и появляется "Msg 0".
23 янв 13, 14:49    [13815685]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
Crimean
Member

Откуда:
Сообщений: 13148
а вот с примером интересно!

из студии:

(1 row(s) affected)
Msg 0, Level 11, State 0, Line 0
При выполнении текущей команды возникла серьезная ошибка.. При наличии результатов они должны быть аннулированы.

из "старой" квери (SQL 2000, там ODBC, за это и держу)

Column name or number of supplied values does not match table definition.

при этом dbcc useroptions - одинаковые
23 янв 13, 14:53    [13815711]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Можно файлить багу.
23 янв 13, 14:53    [13815718]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
Гость333
Member

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

А у меня при подключении из QA к серверу 2008R2 и выполнении такого:
declare @t table (id int, a int);
insert @t exec dbo.select_1;

выдаётся "The command(s) completed successfully."

При выполнении такого:
declare @t table (id int, a int);
insert @t exec dbo.select_1;
select * from @t;

"(0 row(s) affected)" и пустая табличка со столбцами id, a.
23 янв 13, 15:01    [13815793]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
Crimean
Member

Откуда:
Сообщений: 13148
смотрим дальше. по сути, ошибка возникает "не в том" try / catch который написан, а непосредственно в insert / exec
если мы уберем "тот" try то в студии получим:

Msg 213, Level 16, State 7, Procedure aspra_5_6_only_m, Line 213
Column name or number of supplied values does not match table definition.

вывод - я правильно делаю, что не использую try / catch во "внутреннем" T-SQL коде, кривой он еще пока для R2 включительно
23 янв 13, 15:07    [13815831]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Гость333,

пример должен быть сложный. я с insert / exec уже всех окрестных собак сожрал. и все равно нифига не понимаю, честно
видать слишком основательно "присрано". еще основательнее, чем try / catch
23 янв 13, 15:08    [13815841]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
alter procedure dbo.select_1
as
  begin try
	select 1 as id;
  end try
  begin catch	
	declare @s varchar(2000)
	set @s = error_message()
	--1 raiserror('Мы сюда попали при insert/exec: %s',16,1,@s) with nowait
	--2 select @s
  end catch
go

	declare @t table (id int, a int);
	insert @t 
	exec dbo.select_1

Раскомментарить либо --1 либо --2. Сделать Выводы.
23 янв 13, 15:33    [13816094]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Кажется, если блок catch пуст и не содержит в себе raiserror -insert/exec читает ошибку по выходу из процедуры, не находит ничего и генерирует свою "A severe error occurred..."
23 янв 13, 15:38    [13816130]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
)))
Guest
ambarka_max,
спасибо, буду использовать raiserror в обязательном порядке
)))
23 янв 13, 15:43    [13816194]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
ambarka_max
Member

Откуда: Россия
Сообщений: 517
Да, согласен с Crimean, там много всякого непонятного: например искусственный raiserror внутри блока try тоже добавляет удивительных вещей.
23 янв 13, 15:51    [13816279]     Ответить | Цитировать Сообщить модератору
 Re: Msg 0, Level 11, State 0, Line 0  [new]
Crimean
Member

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

и с вашим примером поведение разных провайдеров отличается
в то время, когда ODBC говорит

The command(s) completed successfully.

натив клиент говорит

Msg 0, Level 11, State 0, Line 0
При выполнении текущей команды возникла серьезная ошибка.. При наличии результатов они должны быть аннулированы.

))),

если в проце, которая дает данные "финальную" вычитку делать типа в finally блоке - ошибка будет вменяемой даже если оставить try / catch блок в хранимке

так что не все так однозначно

еще пример:

alter procedure dbo.select_1
as
set nocount on
select 1 as id;
raiserror( '111', 16, 1 )
return 1
go

сообщение "111" теряется вообще. но если его поставить перед выдачей данных - оно не теряется
23 янв 13, 15:58    [13816375]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить