Почему я получаю Msg 121, уровень 15, состояние 1, строка 12 - PullRequest
0 голосов
/ 01 мая 2018

Во-первых, я видел ответы на этот вопрос, и они не относятся ко мне. У меня одинаковое количество столбцов в моих инструкциях 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

1 Ответ

0 голосов
/ 01 мая 2018

Если мой подсчет верен, код имеет двенадцать столбцов в предложении INSERT и только одиннадцать в предложении SELECT. Один отсутствует, поэтому просмотрите ваши столбцы, чтобы выяснить, какой из них отсутствует, и добавьте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...