Bảng đổi tên máy chủ SQL từ cơ sở dữ liệu khác


10

Có cách nào trong SQL Server để đổi tên bảng trong cơ sở dữ liệu khác không? Khi bạn đang ở trong cơ sở dữ liệu hiện tại và di chuyển dữ liệu sang cơ sở dữ liệu khác trong bảng TEMP và sau đó đổi tên bảng TEMP trong cơ sở dữ liệu khác đó. Tôi không muốn sử dụng "USE [cơ sở dữ liệu]" vì tên cơ sở dữ liệu có thể thay đổi trên các máy chủ khác nhau.

Cảm ơn đã giúp đỡ trước!

Câu trả lời:


6

Bạn nên sử dụng sql động để làm điều này. Xây dựng một chuỗi và thực hiện nó. Miễn là bạn biết tên của cơ sở dữ liệu đích, mọi thứ sẽ ổn.

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

Điều đó chắc chắn là có thể, nhưng hãy nhớ rằng SQL động nên tránh khi có thể . Nó dễ dàng dẫn đến các vấn đề bảo mật và hiệu suất.

Sau khi suy nghĩ về câu hỏi của bạn một chút, bạn có chắc chắn sẽ không có ý nghĩa hơn khi tạo bảng khác với tên chính xác và sau đó chỉ cần CHỌN vào nó từ bảng TEMP? Tôi giả sử bảng TEMP thực sự là một bảng tạm thời cục bộ / toàn cầu hoặc biến bảng.


3

Sử dụng SQL động

  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;

Hoặc bằng cách chỉ định cơ sở dữ liệu trong EXEC:

USE MyDB1
GO

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

Như đã nêu trong http://www.sqlservercentral.com/Forums/Topic931229-1292-1.aspx


1
MyDB2..sp_renamelà đơn giản nhất cho đến nay!
Michel de Ruiter

0

Bạn cũng có thể sử dụng SSMS. Ưu điểm của việc sử dụng SSMS là nó sẽ đi qua các tham chiếu và các ràng buộc của bạn và đổi tên chúng. Chỉ cần mở trình duyệt đối tượng trong SSMS, tìm bảng quan tâm và đổi tên nó. Nếu bạn có các ràng buộc khóa ngoài trong các bảng khác tham chiếu đến bảng được đổi tên, nó sẽ đổi tên bảng thành tên bảng mới trong các định nghĩa chính đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.