2017-01-08 3 views
1

Я хочу заменить таблицу SalesResults новой версией, содержащей последние рассчитанные результаты.Лучший способ переименовать таблицу SQL?

Я думаю, что для выполнения SQL Server потребуется всего несколько миллисекунд, но безопасно ли для всех пользователей доступ к таблице SalesResults в то время?

Если нет, то я должен включить в BEGIN TRANSACTION, COMMIT следующее:

DROP TABLE dbo.SalesResults; 
EXEC sp_rename 'SalesResultsNew', 'SalesResults' 
+0

http://dba.stackexchange.com/questions/25828/the-best-way-to-rename-the-tables-after-development-completed – McNets

+0

"DROP TABLE не может использоваться для удаления таблицы, на которую ссылаются с помощью ограничения FOREIGN KEY. ... "[Ref] (https://technet.microsoft.com/en-us/library/ms173790%28v=sql.110%29.aspx?f=255&MSPPError=-2147217396). – HABO

ответ

3

Я хотел бы сделать что-то подобное в нерабочее время или в период обслуживания на всякий случай

Begin Transaction 

Drop Table dbo.SalesResults 
Exec sp_rename 'SalesResultsNew', 'SalesResults' 

Commit Transaction 

Это предполагает, что таблица SalesResultsNew уже существует.

+0

Спасибо. Да, он разработан как глобальный веб-сайт 24x7 с тем, что процесс обновления результатов происходит один раз в день. Итак, я считаю, что Begin Transaction защитит пользователей от ошибки «table not exist»? – user1946932

+0

По существу да, заставляя их ждать, пока транзакция не будет выполнена –

+0

ОК, спасибо. – user1946932

1

Если вы делаете это на постоянной основе (и это похоже на вас), я бы вместо этого использовал синоним. Таким образом, фактические таблицы можно было бы назвать что-то вроде dbo.SalesResults_20170108 и вы могли бы сделать что-то вроде:

create synonym dbo.SalesResults for dbo.SalesResults_20170108; 

Каждый день, вы бы переместить синоним, чтобы указать на новую таблицу SalesResults, когда он будет готов.

+0

Даже не знал об этом и не пробовал. Узнай что-то новое повседневное +1 – EdSF

+0

Я полагаю, что OP все равно придется использовать транзакцию, чтобы отказаться от старого синонима и установить новое. Но, конечно, это должно быть намного быстрее. –

Смежные вопросы