0

なぜこれが私にエラー102、間違った構文を与えるのか誰にも分かりませんか?

declare @i int=20

while @i<=50
begin
    try
        if convert(char,getdate(),@i) is not null 
            begin
                select convert(char,getdate(),@i) 
            end
        set @i=@i+1
    end try
    begin catch
        set @i=@i+1
    end catch;
end
4

3 に答える 3

2

end catch の後のセミコロンを削除し、try の前に begin を追加します。

何かのようなもの

declare @i int=20

while @i<=50
begin
    begin try
        if convert(char,getdate(),@i) is not null 
            begin
                select convert(char,getdate(),@i) 
            end
        set @i=@i+1
    end try
    begin catch
        set @i=@i+1
    end catch
end

SQL フィドルのデモ

修正された構文は次のとおりです

BEGIN TRY
     { sql_statement | statement_block }
END TRY
BEGIN CATCH
     [ { sql_statement | statement_block } ]
END CATCH
于 2013-08-26T15:24:28.970 に答える
2

あなたのインデントから判断すると、あなたはBEGIN TRY5行目を望んでいたと思います.

于 2013-08-26T15:24:39.210 に答える
1

begin tryだけでなくでtryあるため、 のbegin前はtryに関連付けられますtry。つまり、 は のcatch外側にありwhile、 から分離され、最後に 1 つのステートメントがtry多すぎます。end

に変更tryするだけbegin tryです。

于 2013-08-26T15:25:19.863 に答える