Если связанный сервер не работает, что произойдет с запросом в SQL Server?

Я понимаю, что в MS SQL Server, если физический сервер не работает, экземпляр базы данных этой службы будет недоступен, и запрос не сможет выполняться с этого сервера.

Если у меня есть хранимая процедура базы данных для извлечения данных со связанных серверов с использованием условия IF ELSE, а IF один из связанных серверов не работает, будет ли запрос извлекать данные как 0 и переходить к условию ELSE для получения данных со связанного сервера 2?

@CSQL = 'SELECT @ROWCOUNT = COUNT(*) from [LinkedServer1].DATABASE.DBO.TABLE'
EXEC (@CSQL);

IF @ROWCOUNT>0
BEGIN

SET @SQL = 'INSERT INTO TABLE SELECT * FROM [LINKEDSEVER1].DATABASE.DBO.TABLE';
EXEC(@SQL);

END
ELSE
BEGIN

SET @SQL = 'INSERT INTO TABLE SELECT * FROM [LINKEDSEVER2].DATABASE.DBO.TABLE';
EXEC(@SQL);

END

Здесь, если [LinkedServer1] не работает, будет ли запрос извлекать данные из [LinkedServer1] с использованием условия else или из-за первой проверки запроса @CSQL = 'SELECT @ROWCOUNT = COUNT(*) from [LinkedServer1].DATABASE.DBO.TABLE' запрос не вернет никаких записей, поскольку LinkedServer1 недоступен?


person Sathiya Kumar    schedule 23.11.2020    source источник


Ответы (1)


Я понял идею, но, вероятно, было бы лучше использовать приведенный здесь ответ в качестве отправной точки: Проверить, запущен ли связанный SQL-сервер

Они хотели, чтобы код работал на обоих связанных серверах, несмотря ни на что, но это лишь немного отличается. Вы можете проверить оба сервера, чтобы увидеть, работают ли они, назначить переменные в блоках catch.

После их запуска вы узнаете, работает ли 1 или оба сервера, проверив назначенные переменные, а затем запустите свой код (или нет, если оба не работают).

person SixtusTyrannicus    schedule 23.11.2020