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 TRY第 5 行。

于 2013-08-26T15:24:39.210 回答
1

它的begin try,不只是try,所以begin之前的try将与try。这意味着catch结尾在 之外while,与 分开,try最后你会得到一个太多end的语句。

因此,只需更改trybegin try.

于 2013-08-26T15:25:19.863 回答