testdabse.invoice
テーブルのデータをbasecampdev.invoice
テーブルにコピーしようとしています。 testdabse
はローカルデータベースですが、basecampdev
はサーバー内にあります。
データを別のテーブルにコピーするためのクエリが機能しない、と言う
Invalid object name 'basecampdev.dbo.invoice'.
私はこれを読んでいます ドキュメント .
これらはサーバーから提供される情報です
Server type: Database Engine
Server name: server.database.windows.net (this is not the real name)
Authentication: SQL Server Authentication
Login: myusername
Password: mypassword
このクエリを実行できるようにサーバーに接続するにはどうすればよいですか
INSERT INTO [basecampdev].[dbo].[invoice]
([InvoiceNumber]
,[TotalAmount]
,[IsActive]
,[CreatedBy]
,[UpdatedBy]
,[CreatedDate]
,[UpdatedDate]
,[Remarks])
SELECT [InvoiceNumber]
,[TotalAmount]
,[IsActive]
,[CreatedBy]
,[UpdatedBy]
,[CreatedDate]
,[UpdatedDate]
,[Remarks] FROM [testdabse].[dbo].[invoice]
スクリーンショット
SQL Server でリンクされたデータベースサーバーを作成およびクエリする必要があるようです
現時点では、3つの部分名mydatabase.dbo.mytable
を使用して異なるデータベース間で行われるクエリを作成しましたが、レベルを上げて4つの部分名myserver.mydatabase.dbo.mytable
を使用する必要があります。 詳細については、4つの部分の命名に関するこの投稿
編集
既存のクエリの4つの部分の名前は、次のようになります(既に試したことがあると思われますか?)ホストファイルを編集するか、サーバーを登録するか、database.windows.net
の場所を特定する必要があります。
INSERT INTO [DATABASE.WINDOWS.NET].[basecampdev].[dbo].[invoice]
([InvoiceNumber]
,[TotalAmount]
,[IsActive]
,[CreatedBy]
,[UpdatedBy]
,[CreatedDate]
,[UpdatedDate]
,[Remarks])
SELECT [InvoiceNumber]
,[TotalAmount]
,[IsActive]
,[CreatedBy]
,[UpdatedBy]
,[CreatedDate]
,[UpdatedDate]
,[Remarks] FROM [BC1-PC].[testdabse].[dbo].[invoice]
リモートサーバーにアクセスできない場合は、 リンクデータベースサーバー を作成できるかどうかを確認します。
EXEC sp_addlinkedserver [database.windows.net];
GO
USE tempdb;
GO
CREATE SYNONYM MyInvoice FOR
[database.windows.net].basecampdev.dbo.invoice;
GO
次に、完全な4部名を必要とせずにMyEmployee
に対してクエリを実行できます
サイモンによって与えられた答えは私のためにうまくいきますが、あなたは正しい順序でそれをしなければなりません:まず、あなたがあなたの[DATABASE.WINDOWS.NET]。[basecampdev]であるデータを挿入したいサーバーにいる必要があります場合。
請求書テーブルからいくつかのデータを選択して、アクセスできることを確認できるかどうかを確認できます。
Select top 10 * from [DATABASE.WINDOWS.NET].[basecampdev].[dbo].[invoice]
次に、Simonが指定したクエリを実行して、別のサーバーにリンクします。今回は他のサーバーを使用します。
EXEC sp_addlinkedserver [BC1-PC]; -- this will create a link tempdb that you can access from where you are
GO
USE tempdb;
GO
CREATE SYNONYM MyInvoice FOR
[BC1-PC].testdabse.dbo.invoice; -- Make a copy of the table and data that you can use
GO
次に、挿入ステートメントを実行します。
INSERT INTO [DATABASE.WINDOWS.NET].[basecampdev].[dbo].[invoice]
([InvoiceNumber]
,[TotalAmount]
,[IsActive]
,[CreatedBy]
,[UpdatedBy]
,[CreatedDate]
,[UpdatedDate]
,[Remarks])
SELECT [InvoiceNumber]
,[TotalAmount]
,[IsActive]
,[CreatedBy]
,[UpdatedBy]
,[CreatedDate]
,[UpdatedDate]
,[Remarks] FROM MyInvoice
お役に立てれば!
ソースデータベースがリンクサーバーにない場合、テーブルを別のデータベースからターゲットサーバーデータベースに直接コピーすることはできません。ただし、目的のテーブルのスクリプト(データを含むスキーマ)をソースサーバーDBで一時的に1つのテーブルに生成し、宛先サーバーDBでスクリプトを実行して、データを含むテーブルを作成する1つの方法があります。最後に、INSERT INTO [DESTINATION_TABLE] select * from [TEMPORARY_SOURCE_TABLE]を使用します。宛先テーブルにデータを取得した後、一時テーブルを削除します。
私は同じ状況に直面したときにこの解決策を見つけました。これがあなたにも役立つことを願っています。
USE [mydb1]
SELECT *
INTO mytable1
FROM OPENDATASOURCE (
'SQLNCLI'
,'Data Source=XXX.XX.XX.XXX;Initial Catalog=mydb2;User ID=XXX;Password=XXXX'
).[mydb2].dbo.mytable2
/* steps -
1- [mydb1] means our opend connection database
2- mytable1 means create copy table in mydb1 database where we want insert record
3- XXX.XX.XX.XXX - another server name.
4- mydb2 another server database.
5- write User id and Password of another server credential
6- mytable2 is another server table where u fetch record from it. */
リモートオブジェクトに CREATE SYNONYM を使用できます。