SQL Server เปลี่ยนชื่อตารางจากฐานข้อมูลอื่น


10

มีวิธีใดใน SQL Server ที่จะเปลี่ยนชื่อตารางในฐานข้อมูลอื่นหรือไม่? เมื่อคุณอยู่ในฐานข้อมูลปัจจุบันและย้ายข้อมูลไปยังฐานข้อมูลอื่นในตาราง TEMP แล้วเปลี่ยนชื่อตาราง TEMP ในฐานข้อมูลอื่นนั้น ฉันไม่ต้องการใช้ "USE [ฐานข้อมูล]" เนื่องจากชื่อฐานข้อมูลสามารถเปลี่ยนแปลงได้บนเซิร์ฟเวอร์ที่แตกต่างกัน

ขอบคุณสำหรับความช่วยเหลือล่วงหน้า!

คำตอบ:


6

คุณควรใช้ dynamic 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 เป็นจริง 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ง่ายที่สุดโดยไกล!
Michel de Ruiter

0

คุณยังสามารถใช้ SSMS ข้อดีของการใช้ SSMS ก็คือมันจะผ่านการอ้างอิงและข้อ จำกัด ของคุณและเปลี่ยนชื่อเหล่านั้นเช่นกัน เพียงเปิดเบราว์เซอร์วัตถุใน SSMS ค้นหาตารางที่สนใจและเปลี่ยนชื่อ หากคุณมีข้อ จำกัด ของ foreign key ในตารางอื่นที่อ้างถึงตารางที่ถูกเปลี่ยนชื่อมันจะเปลี่ยนชื่อตารางเป็นชื่อตารางใหม่ในนิยามของคีย์เหล่านั้นเช่นกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.