Ваш вопрос все еще немного неясен. "Является ли эта хранимая процедура правильной?" довольно расплывчато, и вы также попросили помощи, добавив логику «Попробуйте ... поймать».
Во-первых, какой "правильный" вы ищете? Если "valid sql" - это все, что вам нужно, то при условии, что связанный сервер MHSQL01D настроен правильно и все имена объектов верны, да, это должно работать. Вы можете обрезать, вставлять и удалять все в рамках этой процедуры.
Есть и другие проблемы, такие как производительность «IN». Кроме того, вы присоединяетесь к таблице на связанном сервере и фактически возвращаете (возможно, в зависимости от количества допустимых случаев) большое количество данных, которые вы просто отбрасываете (все данные из vNdcPrices, где Price> 0). Я предполагаю, что недопустимые случаи - это меньший набор, так что вы можете переписать его так, чтобы меньший набор данных был тем, что отправляется по проводам.
Что касается другого вопроса, что вы пытаетесь поймать? Исключение при выполнении процедуры, но есть проблема на стороне связанного сервера (связанный сервер отключен, таблица ушла и т. Д.) Или исключение при создании процедуры? Связанный сервер должен быть в рабочем состоянии, и таблица должна быть в рабочем состоянии, и все имена действительны во время создания / изменения. Если вы хотите перехватывать проблемы во время выполнения, сработает следующее:
BEGIN TRY
INSERT ... LinkedServer.DB.Schema.Table ...
END TRY
BEGIN CATCH
-- Error Handling Code --
...
END CATCH