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

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

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


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

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

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

не ленитесь для инструкций insert указывать весь список столбцов.
...
Рейтинг: 0 / 0
Column name or number of supplied values does not match table definition.
    #40068132
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а разве xp_cmdshell по стандарту не возвращает только одну колонну с названием [output] ?
...
Рейтинг: 0 / 0
Column name or number of supplied values does not match table definition.
    #40068133
Caxa_ASS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Column name or number of supplied values does not match table definition.
    #40068134
Caxa_ASS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.
...
Рейтинг: 0 / 0
Column name or number of supplied values does not match table definition.
    #40068152
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Column name or number of supplied values does not match table definition.
    #40068395
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Caxa_ASS,

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


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