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はるかに簡単です!
Michel de Ruiter

0

SSMSを使用することもできます。SSMSを使用する利点は、参照と制約を通過し、それらの名前も変更されることです。SSMSでオブジェクトブラウザーを開くだけで、目的のテーブルを見つけて名前を変更できます。名前を変更するテーブルを参照する他のテーブルに外部キー制約がある場合、それらのキー定義でもテーブルの名前が新しいテーブル名に変更されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.