【问题标题】:Stored procedure multiple inserts error存储过程多次插入错误
【发布时间】:2016-11-10 13:54:42
【问题描述】:

我正在 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

已编辑,在阅读了 cmets 和建议的答案后,这就是解决问题的方法:

-- 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

在我将数据输入tbl1Recipients 后,它只需要另一个SELECT

【问题讨论】:

  • 简而言之,你的语法是错误的。请检查您的 INSERT 语句的语法
  • @Squirrel 如果我删除 Insert 的 tbl1Recipients 它可以工作。我确实知道允许多次插入...但我检查了 tbl1Recipients 的值,似乎没问题。
  • 您的插入语句看起来错误。 select * from '@sample 的结果不应同时适合具有 4 列的表和具有 18 列的另一个表。您应该能够将两个插入语句与两个不同的选择结果集分开,也许构建一个'@samplerecipients 和一个'@sampleemails
  • 您检查了 tbl1Recipients 的哪些值?没有。您是否想一次性将@Sample 输入两个不同的表格?这在语法上肯定是不正确的,此外,您还需要在选择中明确列列表以匹配插入的列
  • @Nick.McDermaid,是的,我正试图这样做。

标签: sql-server stored-procedures


【解决方案1】:

这是你的第一个insert:

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

接下来是VALUES 或SELECT。下一个令牌是INSERT,这没有任何意义。

您需要包含要插入的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 2016-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多