Во-первых, я видел ответы на этот вопрос, и они не относятся ко мне. У меня одинаковое количество столбцов в моих инструкциях SELECT и INSERT. Пожалуйста, помогите, я потратил полдня на это. Когда я запускаю его, он работает отлично, но выдает ошибку после последней итерации.
Сообщение 121, Уровень 15, Состояние 1, Строка 12 Список выбора для ВСТАВКИ
Оператор содержит больше элементов, чем список вставки. Номер
Значения SELECT должны соответствовать количеству столбцов INSERT.
proc [dbo].[uspPOP_WBC]
--params
(@ptblname varchar(MAX)
,@pID_Sub varchar
,@pSubCodeShort varchar(2)
,@pdbname varchar(10) )
AS
BEGIN
SET nocount ON;
DECLARE @strSQL AS nvarchar(MAX)
SET @strSQL = 'INSERT INTO dbo.WBC
( ID
, ID_SUB
, wellcompl
, id_wellcompl
, id_type_wellcompl
, type_wellcompl
, id_wellstring
, wellstring
, type_wellstring
, start_date
, end_date
, comment)'
SET @strSQL = @strSQL +
' SELECT WC.id
,'+convert(varchar(1),@pID_Sub)+'
, WC.name
, WC.id
, WC.id_type_wellcompl
, TWC.name
, WC.id_wellstring
, WS.name
, TWS.name
, WC.start_date
, WC.end_date
, WC.comment
FROM (
['+ @pdbname+ @pSubCodeShort +'].[dbo].[wellbore_compl] as WC
INNER JOIN ['+@pdbname+ @pSubCodeShort+'].[dbo].[wellstring] as WS
ON WC.id_wellstring = WS.id
INNER JOIN ['+@pdbname+ @pSubCodeShort+'].[dbo].[type_wellcompl] as TWC
ON WC.id_type_wellcompl = TWC.id
INNER JOIN ['+@pdbname+ @pSubCodeShort+'].[dbo].[type_wellstring] as TWS
ON WS.id_type_wellstring = TWS.id)
where WC.deletedAt is null'
;
EXEC sp_executesql @strSQL
SET nocount OFF;
END
Распечатка @ strSQL
INSERT INTO dbo.WBC ( ID, ID_SUB, wellcompl, id_wellcompl,
id_type_wellcompl, type_wellcompl, id_wellstring, wellstring,
type_wellstring, start_date, end_date, comment)
SELECT
WC.id
, 1
, WC.name
, WC.id
, WC.id_type_wellcompl
, TWC.name
, WC.id_wellstring
, WS.name
, TWS.name
, WC.start_date
, WC.end_date
, WC.comment
FROM (
[PDS_SYNC_CM].[dbo].[wellbore_compl] as WC INNER JOIN [PDS_SYNC_CM].[dbo].[wellstring] as WS ON WC.id_wellstring = WS.id
INNER JOIN [PDS_SYNC_CM].[dbo].[type_wellcompl] as TWC ON WC.id_type_wellcompl = TWC.id
INNER JOIN [PDS_SYNC_CM].[dbo].[type_wellstring] as TWS ON WS.id_type_wellstring = TWS.id)
where WC.deletedAt is null