0

このような単純な問題のために、この投稿が非常に長くなって申し訳ありません。私はこれにほぼ 3 日間取り組んできましたが、完全に夢中になっているので、誰かがこの悪夢から抜け出せるように、できる限り詳細をここに書き込もうとしています!

私は基本的に、共有ホストから 2 つの SQL Server 2008 R2 データベース バックアップ ファイルを持っています:database-1.bakdatabase-2.bak. これらのデータベースはそれぞれ、同じ共有サーバー上の異なる共有ホスティング アカウントに設定され、それぞれに 1 人のデータベース ユーザー (「database-1」と「database-2」という名前が付けられています) が設定されています。データベースの構造は同じですが、データは異なります。Database-1コンテンツがありますが、database-2空です。からすべてのデータをコピーして、共有ホストに再アップロードdatabase-1したいと考えています。2 つのデータベースはまったく同じである必要がありますが、スキーマとスキーマによって所有されている必要があります。database-2database-2database-1database-1database-2database-2

として SQL Server Management Studio Express 2008 R2 にログインし、これらのデータベースを復元したので、saそこに 2 つのデータベースができました。もう 1 つは、eg などと呼ばれるテーブルのロードです。そのため、すべてのテーブルはスキーマによって「所有」され(テーブル名の前に が付加されます)、すべてのテーブルはスキーマによって「所有」されます (テーブルは名前の前に) が追加されます。database-1.tblTestdatabase-1.tblTest2database-2.tblTestdatabase-2.tblTest2database-1database-1database-1.database-2database-2database-2.

右クリックdatabase-1して選択Tasks > Export Dataし、にエクスポートしようとしましたdatabase-2。これに関する奇妙な点は、エクスポートのためにオブジェクトを自動的にマップするときに、次のようになることです。

database-1.tblTest (on 'source' database-1) -> database-1.tblTest (on 'destination' database-2).  

代わりにこれを行うことを望んでいるので、それは奇妙です:

database-1.tblTest (on 'source' database-1) -> database-2.tblTest (on 'destination' database-2). 

database-2 のテーブルがそのdatabase-2.所有者を保持することを願っています。次のように各テーブルをマッピングすると:

database-1.tblTest -> database-2.tblTest

エクスポートは失敗します。マッピングをデフォルト(database-1.tblTest -> database-1.tblTest)のままにしておくと成功しますが、スキーマdatabase-2が所有するテーブルが大量にロードされます。database-1

これが今私がいるところです。Database-1復元したときと同じです。しかし、database-2今では が先頭に追加されたテーブルのセットと、が先頭に追加されdatabase-2.た同じテーブルのセットがありdatabase-1.ます。

これは問題ですdatabase-2。ホスト サーバーに再度アップロードしようとすると、スキーマがdatabase-1同じサーバー上にある別のアカウントを使用しようとしているためにエラーが発生するためです。database-2したがって、スキーマの所有者を維持するためにテーブルが必要ですが、database-2からのデータで満たされるだけdatabase-1です。

database-2インポートしたテーブルのスキーマをからdatabase-1に変更するために、次のようなクエリを実行してみましたdatabase-2

USE [database-2]
ALTER SCHEMA [database-2] TRANSFER [database-1.tblTest]

ただし、これは単なるエラーです。

メッセージ 15151、レベル 16、状態 1、行 2
存在しないか権限がないため、オブジェクト 'database-1.tableTest' が見つかりません。

全体を通して管理スタジオにログインしているsaため、権限は問題になりません。

database-2このデータを取得してスキーマの所有者を同じに保つ方法について、誰かが光を当てることができますか?

どんな助けでも大歓迎です、ありがとう!

4

1 に答える 1

5

構文は少しずれています...スキーマとテーブルを単一の角括弧で囲むため、ピリオドダッシュを含むテーブル名があると想定されています。これを試してください:

ALTER SCHEMA [database-2] TRANSFER [database-1].[tblTest];

データベース、スキーマ、オブジェクト、列の名前にダッシュを使用しないことを強くお勧めします。それらを使用すると、角かっこが必要になり、それらを予期しない他の多くのツールやスクリプトが複雑になる可能性があります。

于 2011-07-07T13:04:26.417 に答える