SQL Server переименовывает таблицу из другой базы данных


10

Есть ли способ в SQL Server переименовать таблицу в другой базе данных? Когда вы находитесь в текущей базе данных и переносите данные в другую базу данных в таблице TEMP, а затем переименовываете таблицу TEMP в этой другой базе данных. Я не хочу использовать «USE [база данных]», так как имя базы данных может меняться на разных серверах.

Спасибо за помощь в продвижении!

Ответы:


6

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

use CurrentDB
declare @x varchar(1000), @otherDb sysname = 'NewDB';

set @x = 'use ' + @otherDB + '

EXEC sp_rename ''dbo.temp'', ''temp2''
'
exec (@x);
print @x;
GO

3

Это, конечно, возможно, но помните, что при возможности следует избегать динамического SQL . Это легко приводит к проблемам с безопасностью и производительностью.

Подумав немного о своем вопросе, уверены ли вы, что не было бы больше смысла создавать другую таблицу с правильным именем, а затем просто вставлять в нее таблицу TEMP? Я предполагаю, что таблица TEMP на самом деле является локальной / глобальной временной таблицей или табличной переменной.


3

Использование динамического SQL

  USE MyDB1
  GO

  DECLARE @db_name   NVARCHAR(20)   = 'myDB2'
  DECLARE @sql       NVARCHAR(1000)

  SET @sql = N'EXEC '+ quotename(@db_name)+ '..sp_rename ''[MyTable]'', ''[YourTable]'';';

  PRINT @sql;
  EXEC SP_EXECUTESQL @sql;

Или указав базу данных в EXEC:

USE MyDB1
GO

EXEC MyDB2..sp_rename 'MyTable', 'YourTable'

Как указано в http://www.sqlservercentral.com/Forums/Topic931229-1292-1.aspx


1
MyDB2..sp_renameсамый простой на сегодняшний день!
Мишель де Рюитер

0

Вы также можете использовать SSMS. Преимущество использования SSMS заключается в том, что он будет проходить через ваши ссылки и ограничения, а также переименовывать их. Просто откройте браузер объектов в SSMS, найдите нужную таблицу и переименуйте ее. Если у вас есть ограничения внешнего ключа в других таблицах, которые ссылаются на переименованную таблицу, она также переименует таблицу в новое имя таблицы в этих определениях ключей.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.