存储过程在执行时抛出错误,我没有看到错误说明的错误语法

时间:2013-12-28 18:29:23

标签: sql sql-server stored-procedures

我已经编写了这个存储过程,当我执行它时,我一直收到错误...

  

Msg 102,Level 15,State 1,Procedure s_Add $ Subject $ Info,第127行   '@V'附近的语法不正确。

当我去第127行并环顾四周时,我看不到该行甚至是该区域的语法错误。有没有我没看到的东西?这是存储过程:

CREATE PROCEDURE s_Add$Subject$Info
(
   @SubjectName varchar(50),
   @SubjectDescription varchar(max),
   @QuizIDString varchar(100),
   @GamesIDString varchar(100),
   @VideoIDString varchar(100)
)
as
--declare variables
declare @theSubID int
declare @quizIDLength int
declare @gamesIDLength int
declare @videoIDLength int
declare @quizIDs varchar(200)
declare @gamesIDs varchar(200)
declare @videoIDs varchar(200)
declare @numberCount int
declare @sTemp varchar(100)

--initializing variables
set @quizIDLength = LEN(@QuizIDString)
set @gamesIDLength = LEN(@GamesIDString)
set @videoIDLength = LEN(@VideoIDString)
set @quizIDs = ''
set @gamesIDs = ''
set @videoIDs = ''
set @numberCount = 1


--declare temp tables
declare @Q table --Quiz 
(
QuizID varchar(100),
SubjectID int
)

declare @G table --Games
(
GamesID varchar(100),
SubjectID int
)

declare @V table --Videos
(
VideoID varchar(100),
SubjectID int
)

insert into[Subjects]
(SubjectName, SubjectDescription)
values
(@SubjectName, @SubjectDescription)
set @TheSubID = @@IDENTITY

--Check to see what strings are full then entering ids if true
--Quizzes first
if(@QuizIDLength > 0)
begin
    while(@numberCount <=@quizIDLength)
begin
    set @sTemp = SUBSTRING(@QuizIDString, @numberCount, 1)
if(@sTemp = ',')
begin 
    insert @Q (QuizID, SubjectID) values (@quizIDs, @theSubID)
    set @quizIDs = ''
end
if(@sTemp <> ',')
begin
    set @quizIDs = @quizIDs + @sTemp
end
    set @numberCount = @numberCount + 1
end
--Games second
if(@gamesIDLength > 0)
begin
    while(@numberCount <=@gamesIDLength)
begin
    set @sTemp = SUBSTRING(@GamesIDString, @numberCount, 1)
if(@sTemp = ',')
begin 
    insert @G (GamesID, SubjectID) values (@gamesIDs, @theSubID)
    set @gamesIDs = ''
end
if(@sTemp <> ',')
begin
    set @gamesIDs = @gamesIDs + @sTemp
end
    set @numberCount = @numberCount + 1
end

--Videos third
if(@videoIDLength > 0)
begin
    while(@numberCount <=@videoIDLength)
begin
    set @sTemp = SUBSTRING(@VideoIDString, @numberCount, 1)
if(@sTemp = ',')
begin 
    insert @V (VideoID, SubjectID) values (@videoIDs, @theSubID)
    set @videoIDs = ''
end
if(@sTemp <> ',')
begin
    set @videoIDs = @videoIDs + @sTemp
end
    set @numberCount = @numberCount + 1
end

--inserting the ids to subjectinfo table
insert into [SubjectInfo]
(SubjectID, QuizID)
select SubjectID, QuizID
from @Q

--Games
insert into [SubjectInfo]
(SubjectID, GameID)
select SubjectID, GameID
from @G

--Video
insert into [SubjectInfo]
(SubjectID, VideoID)
select SubjectID, VideoID
from @V

2 个答案:

答案 0 :(得分:5)

如果你使用了更好的缩进格式,你很容易就会发现问题是你遗漏了一些END语句:

CREATE PROCEDURE s_Add$Subject$Info
(
    @SubjectName varchar(50),
    @SubjectDescription varchar(max),
    @QuizIDString varchar(100),
    @GamesIDString varchar(100),
    @VideoIDString varchar(100)
)
as

--declare variables
declare @theSubID int
declare @quizIDLength int
declare @gamesIDLength int
declare @videoIDLength int
declare @quizIDs varchar(200)
declare @gamesIDs varchar(200)
declare @videoIDs varchar(200)
declare @numberCount int
declare @sTemp varchar(100)

--initializing variables
set @quizIDLength = LEN(@QuizIDString)
set @gamesIDLength = LEN(@GamesIDString)
set @videoIDLength = LEN(@VideoIDString)
set @quizIDs = ''
set @gamesIDs = ''
set @videoIDs = ''
set @numberCount = 1


--declare temp tables
declare @Q table --Quiz 
(
    QuizID varchar(100),
    SubjectID int
)

declare @G table --Games
(
    GamesID varchar(100),
    SubjectID int
)

declare @V table --Videos
(
    VideoID varchar(100),
    SubjectID int
)

insert into[Subjects]
    (SubjectName, SubjectDescription)
values
    (@SubjectName, @SubjectDescription)
set @TheSubID = @@IDENTITY

--Check to see what strings are full then entering ids if true
--Quizzes first
if(@QuizIDLength > 0)
begin
    while(@numberCount <=@quizIDLength)
    begin
        set @sTemp = SUBSTRING(@QuizIDString, @numberCount, 1)
        if(@sTemp = ',')
        begin 
            insert @Q (QuizID, SubjectID) values (@quizIDs, @theSubID)
            set @quizIDs = ''
        end
        if(@sTemp <> ',')
        begin
            set @quizIDs = @quizIDs + @sTemp
        end
        set @numberCount = @numberCount + 1
    end
    --Games second
    if(@gamesIDLength > 0)
    begin
        while(@numberCount <=@gamesIDLength)
        begin
            set @sTemp = SUBSTRING(@GamesIDString, @numberCount, 1)
            if(@sTemp = ',')
            begin 
                insert @G (GamesID, SubjectID) values (@gamesIDs, @theSubID)
                set @gamesIDs = ''
            end
            if(@sTemp <> ',')
            begin
                set @gamesIDs = @gamesIDs + @sTemp
            end
            set @numberCount = @numberCount + 1
        end

        --Videos third
        if(@videoIDLength > 0)
        begin
            while(@numberCount <=@videoIDLength)
            begin
                set @sTemp = SUBSTRING(@VideoIDString, @numberCount, 1)
                if(@sTemp = ',')
                begin 
                    insert @V (VideoID, SubjectID) values (@videoIDs, @theSubID)
                    set @videoIDs = ''
                end
                if(@sTemp <> ',')
                begin
                    set @videoIDs = @videoIDs + @sTemp
                end
                set @numberCount = @numberCount + 1
            end

        --inserting the ids to subjectinfo table
        insert into [SubjectInfo]
            (SubjectID, QuizID)
        select SubjectID, QuizID
        from @Q

        --Games
        insert into [SubjectInfo]
            (SubjectID, GameID)
        select SubjectID, GameID
        from @G

        --Video
        insert into [SubjectInfo]
            (SubjectID, VideoID)
        select SubjectID, VideoID
        from @V

答案 1 :(得分:3)

您错过了into关键字

insert   @V (VideoID, SubjectID) values (@videoIDs, @theSubID)
       ^-------here