Обычно я предпочитаю использовать SSIS для преобразования данных. Первым шагом в пакете было бы получить определение, используя SELECT INTO ... WHERE 1=0
, чтобы оно не передавало никаких данных и минимизировало время блокировки (результат SELECT INTO
приводит к блокировкам всей базы данных). Затем, получив итоговую таблицу с определением исходного представления, скопируйте данные.
Если вы боитесь, что определение представления может измениться, придерживайтесь задачи INSERT INTO ... SELECT * FROM
SQL. В противном случае сохраните определение, которое вы извлекли из SQL выше, и создайте таблицу (если она еще не существует). Затем используйте задачу потока данных для передачи данных.
Используя любой из этих подходов, вы избегаете сценария возможного двойного прыжка (если вы используете аутентификацию Windows). Он также может использоваться в задании агента SQL, если вам нужно делать это периодически. В противном случае это может быть немного излишним.
Или вы можете просто запустить первую часть в SSMS, но я определенно рекомендую использовать WHERE 1=0
, затем использовать INSERT INTO
вместо прямой SELECT INTO
. Опять же, чтобы минимизировать блокировку базы данных.