Formatnya mungkin:
<server>.<database>.<schema>.<table>
Misalnya: DatabaseServer1.db1.dbo.table1
Pembaruan : Saya tahu ini adalah pertanyaan lama dan jawaban yang saya miliki benar; Namun, saya pikir orang lain yang tersandung pada hal ini harus mengetahui beberapa hal.
Yaitu, saat melakukan kueri terhadap server tertaut dalam situasi gabungan, SELURUH tabel dari server tertaut kemungkinan akan diunduh ke server yang menjalankan kueri untuk melakukan operasi gabungan. Dalam kasus OP, baik table1
dari DB1
dan table1
dari DB2
akan ditransfer secara keseluruhan ke server yang menjalankan kueri, mungkin bernama DB3
.
Jika Anda memiliki tabel yang besar, ini dapat mengakibatkan operasi yang membutuhkan waktu lama untuk dijalankan. Lagipula sekarang ini dibatasi oleh kecepatan lalu lintas jaringan yang besarnya lebih lambat daripada kecepatan transfer memori atau bahkan disk.
Jika memungkinkan, lakukan satu kueri terhadap server jarak jauh, tanpa bergabung ke tabel lokal, untuk menarik data yang Anda perlukan ke tabel temp. Kemudian tanya dari itu.
Jika itu tidak memungkinkan maka Anda perlu melihat berbagai hal yang akan menyebabkan SQL server harus memuat seluruh tabel secara lokal. Misalnya menggunakan GETDATE()
atau bahkan gabungan tertentu. Pembunuh kinerja lainnya termasuk tidak memberikan hak yang sesuai.
Lihat http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/ untuk beberapa info lebih lanjut.
SELECT * FROM OPENQUERY([SERVER_NAME], 'SELECT * FROM DATABASE_NAME..TABLENAME')
Ini dapat membantu Anda.
sumber
Jika Anda masih menemukan masalah dengan
<server>.<database>.<schema>.<table>
Lampirkan nama server di
[]
sumber
dbo.databaseserver1.db1.dbo.table1
Bagi mereka yang mengalami kesulitan dengan jawaban lain ini , cobalah
OPENQUERY
Contoh:
SELECT * FROM OPENQUERY([LinkedServer], 'select * from [DBName].[schema].[tablename]')
sumber
Anda perlu menentukan skema / pemilik (dbo secara default) sebagai bagian dari referensi. Selain itu, akan lebih baik jika menggunakan gaya gabungan (ANSI-92) yang lebih baru.
select foo.id from databaseserver1.db1.dbo.table1 foo inner join databaseserver2.db1.dbo.table1 bar on foo.name = bar.name
sumber
select * from [Server].[database].[schema].[tablename]
Ini adalah cara yang benar untuk menelepon. Pastikan untuk memverifikasi bahwa server terhubung sebelum menjalankan kueri!
Untuk memeriksa panggilan server tertaut:
sumber
select name from drsql01.test.dbo.employee
Saya harap ini membantu untuk memahami, cara menjalankan kueri untuk server yang ditautkan
sumber
Biasanya kueri langsung tidak boleh digunakan dalam kasus server yang ditautkan karena sangat menggunakan database temp dari SQL server. Pada langkah pertama data diambil ke DB temp kemudian terjadi pemfilteran. Ada banyak utas tentang ini. Lebih baik menggunakan OPENQUERY terbuka karena meneruskan SQL ke server tertaut sumber dan kemudian mengembalikan hasil yang disaring misalnya
SELECT * FROM OPENQUERY(Linked_Server_Name , 'select * from TableName where ID = 500')
sumber
Untuk apa nilainya, saya menemukan sintaks berikut untuk bekerja paling baik:
PILIH * DARI [LINKED_SERVER] ... [TABLE]
Saya tidak bisa mendapatkan rekomendasi orang lain untuk bekerja, menggunakan nama database. Selain itu, sumber data ini tidak memiliki skema.
sumber
klik kanan pada tabel dan klik tabel script sebagai pilih
sumber
Kueri Mengikuti adalah yang terbaik.
SELECT * FROM OPENQUERY([LINKED_SERVER_NAME], 'SELECT * FROM [DATABASE_NAME].[SCHEMA].[TABLE_NAME]')
sumber
PostgreSQL :
Anda harus menghilangkan DBName dari query :
SELECT * FROM OPENQUERY([LinkedServer], 'select * from schema."tablename"')
sumber
Saya telah melakukan untuk mengetahui tipe data pada tabel di link_server menggunakan openquery dan hasilnya berhasil.
SELECT * FROM OPENQUERY (LINKSERVERNAME, ' SELECT DATA_TYPE, COLUMN_NAME FROM [DATABASENAME].INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME =''TABLENAME'' ')
Ini berhasil untuk saya
sumber