2016-11-10 3 views
0

Я пишу простую хранимую процедуру в SQL Server 2016, но когда у меня есть 2 инструкции вставки я получаю сообщение об ошибке, что говоритхранимой процедура несколько вставок ошибок

Неправильный синтаксис около «End»

Есть ли что-то не так с моим синтаксисом или это невозможно?

Обратите внимание, что это табличное значение параметра, который я посылаю в хранимую процедуру в качестве аргументов

SQL заявление:

-- This is the stored procedure 
CREATE PROCEDURE [dbo].[SampleProcedure] 
    (-- which accepts 2 table value parameters 
     -- It should be noted that the parameter is readonly 
    @Sample As [dbo].[SampleDataType] Readonly, 
    @Rec As [dbo].[SampleRecType] ReadOnly 
    ) 
AS 
BEGIN 
    -- We simply insert values into the DB table from the parameter 
    -- The table value parameter can be used like a table with only read rights 

    -- INSERT INTO SampleTable(SampleString, SampleDate) 
    --  SELECT SampleString, SampleDate 
    --  FROM @Sample 

    INSERT INTO tbl1Recipients(strEmailSendIDx, strEmailAddress, strDisplayName, strRecipientType) 
    INSERT INTO tbl1SentEmails(strEmailSendID, dtmSent, strSubject, strBody, strConversationID, strConversationTopic, strConversationIndex, dtmReplied, dtmOpened, dtmClicked, blnTrackOpens, blnTrackClicks, blnTrackReplies, lngMergeID, blnHide, lngLatestEventID, strClickResponse, dtmClickResponse) 
     SELECT * 
     FROM @Sample 
END 

Отредактировано, после прочтения комментариев и предложенный ответ это то, что решается вопрос:

-- This is the stored procedure 
CREATE PROCEDURE [dbo].[SampleProcedure] 
    (
    -- which accepts one table value parameter. 
    -- It should be noted that the parameter is readonly 
    @Sample As [dbo].[SampleDataType] Readonly, 
    @Rec As [dbo].[SampleRecType] ReadOnly 
    ) 
AS 
BEGIN 
    -- We simply insert values into the DB table from the parameter 
    -- The table value parameter can be used like a table with only read rights 

    INSERT INTO tbl1Recipients(strEmailSendID, strEmailAddress, strDisplayName, strRecipientType) 
     SELECT * 
     FROM @Rec 

    INSERT INTO tbl1SentEmails(strEmailSendID, dtmSent, strSubject, strBody, strConversationID, strConversationTopic, strConversationIndex, dtmReplied, dtmOpened, dtmClicked, blnTrackOpens, blnTrackClicks, blnTrackReplies, lngMergeID, blnHide, lngLatestEventID, strClickResponse, dtmClickResponse) 
     SELECT * 
     FROM @Sample 
END 

Все это было нужно другое SELECT после того как я ввел данные в tbl1Recipients

+0

Короче говоря, ваш синтаксис неверен. Пожалуйста, проверьте синтаксис оператора INSERT – Squirrel

+0

@Squirrel, если я удалю 'Insert' для' tbl1Recipients', он работает. Я знаю, что допускаются множественные вставки ... но я проверил значения для 'tbl1Recipients', и кажется, что все в порядке. –

+0

Ваша инструкция вставки выглядит неправильно. Результаты из select * from '@sample не должны укладываться в таблицу с 4 столбцами и другую таблицу с 18 столбцами. Вы должны иметь возможность разделить два оператора вставки с двумя различными наборами результатов выбора, возможно, создать «@samplerecipients» и «@sampleemails» – BasicIsaac

ответ

1

Это ваш первый insert:

Insert Into tbl1Recipients(strEmailSendIDx, strEmailAddress, strDisplayName, strRecipientType) 
Select * From @Rec 

Что ожидается дальше, VALUES или SELECT. Следующий токен - INSERT, и это просто не имеет смысла.

Вам необходимо указать данные, которые вы хотите вставить.

Смежные вопросы