Продолжить утверждение в цикле while в TSQL? - PullRequest
0 голосов
/ 27 сентября 2010

В Sql Server 2000 и 2005 я выполняю оператор select в цикле while.JFYI, этот оператор выбора соединяется со многими связанными серверами и получает некоторые значения.

Если есть какая-либо ошибка, я хочу, чтобы она все еще выполняла следующий оператор в цикле (аналогично оператору continue в c #)

Пример: -

while @rowcount < 10
begin
 set @sql = 'select * from <Remotemachine>.db1.dbo.table1'
 exec sp_executesql @sql
 set @rowcount = @rowcount +1
End

Ответы [ 2 ]

1 голос
/ 27 сентября 2010

В 2005 году вы можете попробовать / поймать.

1 голос
/ 27 сентября 2010

Начните здесь: http://www.sommarskog.se/error_handling_2005.html

Имейте в виду, что некоторые ошибки являются сессионными и даже пакетными терминаторами, и вы не можете перехватить эти

Ссылка, которую я вам дал (и две ссылки на этой странице) должна дать вам достаточно информации о том, как с этим справиться

Кстати, если только это не защелкаемая ошибка, она продолжит выполнение

запустите это

declare @rowcount int, @sql nvarchar(100)
set @rowcount = 1
while @rowcount < 10
begin
 set @sql = 'select * from <Remotemachine>.db1.dbo.table1'
 exec sp_executesql @sql
 print @rowcount
 set @rowcount = @rowcount +1
End

Вот вывод

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '<'.
1
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '<'.
2
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '<'.
3
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '<'.
4
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '<'.
5
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '<'.
6
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '<'.
7
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '<'.
8
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '<'.
9

Вот как вы можете использовать TRY CATCH, чтобы перехватить это

declare @rowcount int, @sql nvarchar(100)
set @rowcount = 1
while @rowcount < 10
begin
 set @sql = 'select * from <Remotemachine>.db1.dbo.table1'

 begin try 
      exec sp_executesql @sql
 end try 
 begin catch
      select ERROR_MESSAGE() -- or do something
 end catch
 print @rowcount
 set @rowcount = @rowcount +1
End
...