Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Column name or number of supplied values does not match table definition. / 8 сообщений из 8, страница 1 из 1
03.05.2021, 15:54
    #40068114
Caxa_ASS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column name or number of supplied values does not match table definition.
Всем привет.

Столкнулся со следующей проблемой. База данных имеет хранимую процедуру.
Процедура работает без проблем, выводит все необходимые данные, которые мне необходимо вставить дальше к примеру во временную таблицу.

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

An INSERT EXEC statement cannot be nested.

Hашел решение данной ситуации -> http://www.t-sql.ru/post/An_INSERT_EXEC_statement_cannot_be_nested.aspx

Из данной ссылки наиболее подходящим, как по мне взял 4-й способ, но при его применении, а также при других, сталкиваюсь со следующей ошибкой:

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

1) Название столбцов таблицы в хранимой процедуре идентично названию столбцов таблицы в создаваемой переменной.
2) Тип данных также идентичен.
3) Порядок столбцов также есть аналогичным.

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

Каким образом можно сделать дебаг, чтобы понять в чем конкретно есть не сходство?
Возможно какие то другие варианты решения данной ситуации.
Буду благодарен за помощь.
...
Рейтинг: 0 / 0
03.05.2021, 16:15
    #40068119
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column name or number of supplied values does not match table definition.
1. Костыли не обязаны работать.
2. Чем придумывать непромокаемый порох, перепишите процедуру под заполнение ВНЕШНЕЙ таблицы. Той же #All.
...
Рейтинг: 0 / 0
03.05.2021, 17:16
    #40068131
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column name or number of supplied values does not match table definition.
Caxa_ASS,


у вас ошибка скорее всего связанна с полем identity.
предполагаю что в процедуре у вас результирующий набор select * from #All

при стейтменте insert into @t exec у вас количество столбцов должно быть меньше на 1 поскольку значения для поля Id будут присвоены автоматически, поэтому в результирующем наборе не должно быть колонки под этот столбец.

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

не ленитесь для инструкций insert указывать весь список столбцов.
...
Рейтинг: 0 / 0
03.05.2021, 17:47
    #40068132
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column name or number of supplied values does not match table definition.
а разве xp_cmdshell по стандарту не возвращает только одну колонну с названием [output] ?
...
Рейтинг: 0 / 0
03.05.2021, 17:49
    #40068133
Caxa_ASS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column name or number of supplied values does not match table definition.
felix_ff,

1) 'у вас ошибка скорее всего связанна с полем identity.' - возможно, но для теста, a) удалил столбец Id в таблице с процедурой, так и в таблице с переменной, без результата; б) удалил только из таблицы в переменной, так же без результата.

2) 'предполагаю что в процедуре у вас результирующий набор select * from #All' - если я Вас правильно понимаю, то под словом результирующий набор - это вывод таблицы с данными, т.е. то, что я хочу чтобы выводилось, да, в конце процедуры:
select * from #All
drop table #All

для теста, убрал * вписал все столбцы, без результатно.

3) 'не ленитесь для инструкций insert указывать весь список столбцов' - сама процедура это набор процедур с INSERT во временную таблицу т.е.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create procedure dbo.All_data.

begin
   create table #All (...)
   ....
   insert into #All
   exec Statistics_from_all_table_1
   insert into #All
   exec Statistics_from_table_2
   .....
   insert into #All
   exec Statistics_from_all_table_3

   select * from #All (для теста убирал * и вписывал все столбцы)
   drop table #All

end;



4) 'не ленитесь для инструкций insert указывать весь список столбцов' - в процедурах которые входят в состав процедур dbo.All_data, для INSERT указаны именно названия столбцов.
...
Рейтинг: 0 / 0
03.05.2021, 17:50
    #40068134
Caxa_ASS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column name or number of supplied values does not match table definition.
.
...
Рейтинг: 0 / 0
03.05.2021, 20:09
    #40068152
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column name or number of supplied values does not match table definition.
Caxa_ASS
felix_ff,

1) 'у вас ошибка скорее всего связанна с полем identity.' - возможно, но для теста, a) удалил столбец Id в таблице с процедурой, так и в таблице с переменной, без результата; б) удалил только из таблицы в переменной, так же без результата.


я вам писал о том что в процедуре у вас результирующий набор должен возвразаться так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create or alter proc [dbo].[All_data]
as
....

select 
      [Name],
      [Cost],
      [Change_Percent],
      [x_1],
      [x_2],
      [x_3],
      [x_4],
      [x_5],
      [x_6],
      [x_7],
      [x_8],
      [x_9],
      [x_10],
      [x_11]
from #All;



а в инструкции которую вы используете как insert exec

должны быть указаны столбцы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
declare @t table ([id] int identity, [Name] nvarchar(30), [Cost] nvarchar(30), [Change_Percent] nvarchar(30), 
[x_1] nvarchar(30),
[x_2] nvarchar(30),
[x_3] nvarchar(30),
[x_4] nvarchar(30),
[x_5] nvarchar(30),
[x_6] nvarchar(30),
[x_7] nvarchar(30),
[x_8] nvarchar(30),
[x_9] nvarchar(30),
[x_10] nvarchar(30),
[x_11] nvarchar(30));

insert into @t ([Name], [Cost], [Change_Percent], [x_1], [x_2], [x_3], [x_4], [x_5], [x_6], [x_7], [x_8], [x_9], [x_10], [x_11])
exec master..xp_cmdShell 'sqlcmd -E -q "exec TestDB.dbo.All_data" -h -1 -W';

select * from @t;
...
Рейтинг: 0 / 0
04.05.2021, 17:56
    #40068395
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column name or number of supplied values does not match table definition.
Caxa_ASS,

Используйте функцию вместо процедуры. Эти лайфхаки потом боком выйдут.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Column name or number of supplied values does not match table definition. / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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