【发布时间】: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