Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Tips Menggunakan SQL Server dengan Salesforce

Daftar Isi

  1. Ringkasan
  2. Klausa DIMANA
  3. Beberapa Tabel Bergabung
  4. Meja Lokal Terlampir ke Tabel Jarak Jauh
  5. Sisipkan, Perbarui, dan Hapus
  6. Perbarui
  7. Perbarui dengan Parameter
  8. Memasukkan Catatan Baru dan Mendapatkan Galat Gumpalan
  9. Mendapatkan ID Tenaga Penjualan untuk Rekaman Terakhir yang Anda Sisipkan
  10. Memperbarui Data SQL Server saat Data Salesforce Berubah
  11. Validasi Skema Malas
  12. Batasan OLEDB Microsoft untuk Penyedia ODBC
  13. Bagaimana cara menemukan catatan dengan umpan baris (baris baru) di alamat penagihan?
  14. Dapatkah saya melihat tabel mana yang tersedia melalui perangkat lunak Easysoft?
  15. Dapatkah saya melihat kolom mana yang tersedia melalui perangkat lunak Easysoft?
  16. Dapatkah saya membuat server tertaut secara terprogram?

Ikhtisar

Dokumen ini memberikan beberapa tips tentang menggunakan SQL Server dengan Salesforce. Komponen yang digunakan untuk menghubungkan SQL Server ke Salesforce adalah SQL Server Linked Server dan Easysoft Salesforce ODBC Driver. Bagaimana Anda menyambungkan SQL Server ke Salesforce dijelaskan dalam artikel ini. Untuk contoh dalam dokumen ini, nama Server Tertaut (yang Anda rujuk dalam perintah SQL) yang digunakan adalah SF8.

Semua SQL dalam dokumen ini telah diuji terhadap SQL Server 2017 dan driver ODBC Easysoft Salesforce versi 2.0.0 hingga 2.0.7.

SQL Server berfungsi OPENQUERY dan EXEC (EXECUTE ) diperkenalkan ke SQL Server 2008 dan fungsi-fungsi ini kompatibel dengan semua versi SQL Server setelah 2008.

Kami telah menulis dokumen ini sebagai tanggapan atas sejumlah pertanyaan yang diterima oleh Tim Dukungan kami tentang menghubungkan SQL Server melalui Easysoft ke Salesforce. Namun, contoh SQL juga harus berguna untuk koneksi Server Tertaut yang menggunakan pengandar dan backend ODBC yang berbeda.

Jika Anda ingin berkontribusi pada dokumen ini, kirimkan kiriman Anda melalui email ke .

WHERE Clause

Masalah umum yang dilaporkan kepada kami adalah "klausa WHERE sederhana membutuhkan waktu lama untuk mengembalikan hanya satu baris". Misalnya:

pilih Id, FirstName, LastName dari SF8.SF.DBO.Contact di mana Id='00346000002I95MAAS'

SQL Server mengonversi kueri di atas dan mengirimkannya ke driver ODBC Salesforce:

pilih Id, FirstName, LastName dari SF.DBO.Contact

Klausa WHERE selalu dihapus, yang memaksa driver ODBC untuk mengembalikan semua baris untuk tabel itu. Kemudian SQL Server memfilternya secara lokal untuk memberi Anda baris yang diperlukan. Tampaknya tidak masalah klausa WHERE apa yang telah Anda tentukan, ini tidak pernah diteruskan ke driver ODBC.

Solusi sederhana untuk ini adalah dengan menggunakan OPENQUERY SQL Server fungsi sebagai gantinya. Misalnya:

pilih * dari OPENQUERY(SF8,'pilih Id, FirstName, LastName dari SF.DBO.Contact where Id=''00346000002I95MAAS'' ')

Semua SQL yang Anda jalankan di dalam OPENQUERY fungsi diteruskan langsung ke driver, termasuk WHERE klausa.

Beberapa Tabel Bergabung

Berikut adalah gabungan dua tabel sederhana di mana kedua tabel kembali dari server tertaut.

pilih a.[Name], BillingStreet, c.[Name] dari SF8.SF.DBO.Account a, SF8.SF.DBO.Contact c di mana a.Id=c.AccountID dan a.[Name] like 'Bersatu%'

SQL Server mengirimkan pertanyaan berikut ke driver ODBC.

pilih * dari Akunpilih * dari Kontak

SQL Server melakukan ini untuk mendapatkan daftar nama kolom dan tipe data. Kemudian melanjutkan untuk mengirim pertanyaan ini ke driver ODBC.

PILIH "Tbl1001"."Id" "Col1042", "Tbl1001"."Nama" "Col1044", "Tbl1001"."BillingStreet" "Col1046" DARI "SF"."DBO"."Akun" "Tbl1001 " ORDER OLEH "Col1042" ASCSELECT "Tbl1003"."AccountId" "Col1057", "Tbl1003"."Nama" "Col1058" DARI "SF"."DBO"."Hubungi" "Tbl1003" PESAN OLEH "Col1057" ASC 

Data dari kedua query dikembalikan ke tabel lokal, kemudian klausa WHERE ditempatkan pada tabel Account dan data dari kedua tabel digabungkan dan dikembalikan.

Sekali lagi penggunaan OPENQUERY memastikan SQL yang Anda tulis diteruskan langsung ke driver ODBC, jadi, sebagai gantinya, di SQL Server Anda akan menjalankan:

pilih * dari OPENQUERY(SF8,'pilih a.[Name], BillingStreet, c.[Name] dari SF.DBO.Account a, SF.DBO.Contact c di mana a.Id=c.AccountID dan a. [Nama] seperti ''United%'' ')

Anda memerlukan sedikit modifikasi, karena SQL Server tidak dapat menangani banyak kolom dengan "Nama" yang sama, jadi Anda perlu mengganti nama salah satu kolom tersebut. Misalnya:

pilih * dari OPENQUERY(SF8,'pilih a.[Name], BillingStreet, c.[Name] sebagai Nama Lengkap dari SF.DBO.Account a, SF.DBO.Contact c di mana a.Id=c.AccountID dan a.[Name] like ''United%'' ')

Ini memaksa driver ODBC untuk memproses seluruh SQL sekaligus dan hanya mengembalikan hasil yang diperlukan.

Tabel Lokal Terlampir ke Tabel Jarak Jauh

Dalam contoh ini, tabel lokal dibuat dengan menjalankan.

pilih * ke LocalAccount dari SF8.SF.DBO.Account

Gabungan dua tabel sekarang terlihat seperti.

pilih a.[Name], BillingStreet, c.[Name] sebagai FullName dari LocalAccount a, SF8.SF.DBO.Contact c di mana a.Id=c.AccountID dan a.[Name] seperti 'United%' 

Ini menyebabkan SQL Server mengirim kueri berikut tiga kali ke pengandar ODBC.

pilih * dari Kontak

Dalam setidaknya satu dari kueri tersebut, SQL Server meminta semua data dalam tabel. Kemudian SQL Server melanjutkan untuk meminta:

PILIH "Tbl1003"."Nama" "Col1008" FROM "SF"."DBO"."Hubungi" "Tbl1003" WHERE ?="Tbl1003"."AccountId"

SQL Server kemudian meneruskan ke pengandar ODBC daftar AccountIds dari tabel LocalAccount di tempat "?" parameter di mana kolom LocalAccount.[Name] cocok dengan klausa LIKE.

Cara yang lebih cepat di mana tabel ODBC adalah tabel kedua dalam kueri, adalah dengan hanya mendapatkan kolom yang Anda butuhkan dari tabel ODBC. Ini dapat dilakukan dengan menggunakan OPENQUERY fungsi. Misalnya:

pilih a.[Name], BillingStreet, c.[Name] sebagai FullName dari LocalAccount a, openquery(SF8,'select [Name], AccountId from SF.DBO.Contact') c di mana a.Id=c. AccountID dan.[Name] seperti 'United%'

Sementara ini masih mendapatkan semua baris dari tabel Kontak, itu hanya mendapatkan kolom yang diperlukan dan karena itu lebih cepat daripada kueri standar.

Cara lain yang mungkin adalah dengan menggunakan kursor dan tabel sementara. Misalnya:

Mulai mendeklarasikan @AccountId sebagai varchar(20) mendeklarasikan @SQL sebagai varchar(1024) -- Buat tabel sementara untuk menyimpan informasi Akun. Pemeriksaan Id memastikan 0 baris data dikembalikan pilih * ke #LocalContact dari openquery(SF8,'select [Name], AccountId from SF.DBO.Contact where Id=''0000000000000000000'' ') -- Siapkan deklarasi kursor kursor selcur untuk memilih Id berbeda dari LocalAccount di mana [Name] seperti 'United%' buka selcur ambil berikutnya dari selcur ke @AccountId sementara @@FETCH_STATUS=0 Mulai pilih @SQL ='insert into #LocalContact pilih [Name], ''' +@AccountId+''' dari OPENQUERY(SF8,''pilih [Nama] dari Kontak di mana AccountId=''''' + @AccountId + ''''' '')' exec (@SQL) ambil berikutnya dari selcur ke @AccountId Akhir tutup selcur deallocate selcur -- Selanjutnya, gabungkan tabel Anda dan lihat data pilih a.[Name], BillingStreet, c.[Name] sebagai FullName dari LocalAccount a, #LocalContact c di mana a.Id=c.AccountID dan a.[Name] like 'United%' -- Jangan lupa hapus tab sementara le drop table #LocalContact End

Metode ini bisa beberapa kali lebih cepat daripada OPENQUERY metode yang ditunjukkan pada contoh sebelumnya, jika klausa WHERE yang diteruskan ke driver ODBC Easysoft menggunakan indeks di Salesforce.

Sisipkan, Perbarui, dan Hapus

Jika Anda menjalankan kueri yang bukan kueri SELECT, maka cara terbaik untuk melakukannya adalah dengan menggunakan EXEC SQL Server fungsi. Jika server tertaut Anda tidak dapat menggunakan EXEC , Anda akan mendapatkan pesan yang mirip dengan:

Server 'SF8' tidak dikonfigurasi untuk RPC.

Untuk menggunakan EXEC , klik kanan pada server tertaut Anda dan pilih properti. Di bagian "Opsi Server", atur "RPC Out" ke "True". Anda kemudian dapat menggunakan EXEC fungsi.

Perbarui

Katakanlah Anda memiliki pernyataan ini di SQL Server:

PERBARUI SF8.SF.DBO.Contact SET LastName='James' WHERE Id='00346000002I95MAAS'

SQL Server mengirimkan SQL ini ke driver ODBC.

pilih * dari "SF"."DBO"."Kontak"

Semua catatan diambil dan SQL Server kemudian mengirimkan pernyataan ini ke driver ODBC.

PERBARUI "SF"."DBO"."Kontak" SET "Nama Belakang"=? DIMANA "Id"=? DAN "Nama Belakang"=?

SQL Server melakukan itu untuk memastikan bahwa catatan tidak berubah antara waktu Anda menjalankan kueri dan waktu UPDATE dijalankan. Metode yang lebih cepat adalah dengan menggunakan SQL Server EXEC fungsi. Misalnya:

exec ('update SF.DBO.Contact set LastName=''James'' where Id=''00346000002I95MAAS''' ) di SF8 

SQL Server mengirimkan driver ODBC seluruh string yang telah Anda masukkan, sehingga kueri dijalankan tanpa memilih seluruh tabel.

Perbarui dengan Parameter

Katakanlah Anda memiliki:

Mulai mendeklarasikan @Id varchar(20)='00346000002I95MAAS' mendeklarasikan @LastName varchar(20)='James' update SF8.SF.DBO.Contact set LastName=@LastName di mana Id=@IdEnd

Ini bekerja dengan cara yang persis sama seperti yang dijelaskan dalam catatan Pembaruan. Namun, sintaks saat menggunakan EXEC perubahan fungsi:

Mulai mendeklarasikan @Id varchar(20)='00346000002I95MAAS' mendeklarasikan @LastName varchar(20)='James' exec ('update SF.DBO.Contact set LastName=? where Id=?', @LastName, @Id ) di SF8End

Di mana Anda memiliki kolom seperti LastName= Anda memasukkan ? sebagai pengganti @LastName untuk mewakili apa yang akan Anda masukkan ke dalam parameter. Parameter kemudian terdaftar setelah pernyataan UPDATE dalam urutan di mana mereka perlu dibaca.

Memasukkan Catatan Baru dan Mendapatkan Galat Gumpalan

Katakanlah Anda mencoba menjalankan:

masukkan ke dalam nilai SF8.SF.DBO.Contact ( FirstName, LastName ) ('Easysoft','Test')

SQL Server mengirimkan ini ke driver ODBC:

pilih * dari "SF"."DBO"."Kontak"

Ini dilakukan dua kali. Saat pertama kali dijalankan, SQL Server memeriksa untuk melihat apakah kumpulan hasil dapat diperbarui. Kali kedua ini dikirim, SQL Server pindah ke catatan kosong setelah catatan terakhir dikembalikan dan mencoba melakukan posisi INSERT, yang memberikan kesalahan.

Penyedia OLE DB "MSDASQL" untuk server tertaut "SF8" mengembalikan pesan "Penyisipan berbasis kueri atau pembaruan nilai BLOB tidak didukung.".

Pesan ini dikembalikan karena penyisipan posisi mencoba menyisipkan semua kolom dengan nilai NULL kecuali yang telah Anda tentukan dalam pernyataan INSERT Anda, dan dalam kasus tabel Kontak, ada BLOB (Area Teks Panjang di Salesforce ), yang tidak didukung oleh Penyedia OLE DB dari Microsoft. Driver ODBC Easysoft Salesforce mendukung penyisipan semua bidang dalam Salesforce tempat Anda memiliki izin untuk memasukkan data. Untuk menyiasatinya, yang perlu Anda lakukan hanyalah menggunakan EXEC.

exec ('masukkan ke SF.DBO.Contact ( FirstName, LastName ) nilai (''Easysoft'',''Test'')') di SF8

Ini hanya mengirimkan INSERT langsung ke driver ODBC.

Mendapatkan ID Tenaga Penjualan untuk Catatan Terakhir yang Anda Sisipkan

Kami telah ditanya oleh beberapa pelanggan kami apa metode termudah untuk mendapatkan Id dari baris yang baru saja dimasukkan. Contoh ini menunjukkan bagaimana Anda bisa mendapatkan ID dari catatan terakhir yang Anda masukkan ke dalam tabel "Kontak".

Mulai mendeklarasikan @Id varchar(20)='00346000002I95MAAS' mendeklarasikan @FirstName varchar(20)='Easysoft' mendeklarasikan @LastName varchar(20)='Test' mendeklarasikan @FindTS varchar(22)=convert(varchar(22 ),GETUTCDATE(),120) mendeklarasikan @SQL sebagai varchar(1024) exec ('masukkan ke SF.DBO.Contact (FirstName, LastName ) nilai (?, ?)', @FirstName, @LastName ) di SF8 pilih @SQL ='pilih Id dari openquery(SF8, ''pilih 1 c.Id teratas dari [User] u, Hubungi c di mana u.Username=CURRENT_USER dan c.CreatedDate>={ts '''''+@FindTS+''' ''} dan c.CreatedById=u.Id dipesan oleh c.CreatedDate desc'')' exec (@SQL) End

Saat catatan dibuat di Salesforce, kolom "Tanggal Dibuat" berisi stempel waktu UTC (Waktu Universal Terkoordinasi) catatan dibuat dan belum tentu tanggal/waktu Anda saat ini. @FindTs string diatur ke UTC sebelum INSERT berlangsung, jadi ketika SELECT untuk mendapatkan Id dipanggil, itu hanya melihat baris yang dimasukkan setelah @FindTS telah ditetapkan.

Selama SELECT, CURRENT_USER Easysoft fungsi juga digunakan untuk membatasi baris yang dikembalikan dari Salesforce hanya untuk pengguna yang telah memasukkan data.

Memperbarui Data SQL Server saat Data Salesforce Berubah

Bagian ini menunjukkan cara membuat tabel SQL Server baru berdasarkan struktur tabel Salesforce dan memperbarui tabel tersebut saat ada perubahan dalam tabel Salesforce tersebut.

membuat prosedur SFMakeLocal( @Link varchar(50), @Remote varchar(50), @Local varchar(50), @DropLocal int) sebagai mendeklarasikan @SQL sebagai nvarchar(max) begin /* Mengimpor data ke lokal table */ /* Set DropLocal ke 1 untuk menghapus tabel lokal jika ada */ if OBJECT_ID(@Local, 'U') IS NOT NULL start if (@DropLocal=1) begin set @SQL='DROP TABLE dbo. '+@Local exec ( @SQL) end else RAISERROR(15600,1,1, 'Local table sudah ada') RETURN end set @SQL='select * into dbo.'+@Local+' from OPENQUERY('+@Link+ ',''pilih * dari '+@Remote+''')' exec(@SQL) pilih 'Tabel Lokal :'+@Lokal+' dibuat.' end -- @Link Server tertaut SQL Server Anda -- @Remote Nama tabel dalam Salesforce -- @Local Tabel lokal tempat Anda ingin menyimpan data -- @DropLocal Setel ke 1 jika tabel ada dan Anda inginkan untuk menjatuhkannya

Jalankan prosedur untuk menyalin struktur rekaman dari tabel Salesforce ke tabel lokal, lalu mentransfer semua data Salesforce. Perintah contoh ini menggunakan tabel Akun. Proses ini dapat memakan waktu cukup lama tergantung pada jumlah data yang Anda miliki di tabel Salesforce.

SFMakeLocal 'SF8','Account','LocalAccount', 0

Argumennya adalah:

Argumen Nilai SF8 Nama Server Tertaut SQL Server. Akun Nama tabel Salesforce yang ingin Anda gunakan untuk membaca struktur dan datanya. Akun Lokal Nama tabel Anda di SQL Server. 0 Nilai default ini dapat diubah menjadi 1 jika Anda menambahkan lebih banyak kolom khusus ke Salesforce dan Anda ingin menghapus tabel lokal untuk membuatnya lagi dengan kolom baru.

Langkah selanjutnya adalah membuat dua prosedur lagi yang akan memperbarui tabel lokal jika ada data yang diperbarui atau dimasukkan ke dalam tabel Salesforce:

membuat prosedur SFUpdateTable ( @Link varchar(50), @Remote varchar(50), membuat prosedur SFUpdateTable @Link varchar(50), @Remote varchar(50), @LocalTable varchar(50) sebagai permulaan -- Memperbarui data ke tabel lokal berdasarkan perubahan di Salesforce.deklarasikan @TempDef sebagai varchar(50)='##EasyTMP_' nyatakan @TempName sebagai varchar(50) nyatakan @TempNumber sebagai desimal nyatakan @CTS sebagai datetime=current_timestamp deklarasikan @TTLimit int =100 mendeklarasikan @MaxCreated sebagai datetime mendeklarasikan @MaxModified sebagai datetime mendeklarasikan @SQL sebagai nvarchar(max) mendeklarasikan @RC sebagai int -- Langkah pertama adalah membuat tabel sementara global set @TempNumber=datepart(yyyy,@CTS)*10000000000 +datepart(mm,@CTS)*100000000+datepart(dd,@CTS)*1000000+datepart(hh,@CTS)*10000+datepart(mi,@CTS)*100+datepart(ss,@CTS) set @ TempName=@TempDef+cast(@TempNumber sebagai varchar(14)) while OBJECT_ID(@TempName, 'U') IS NOT NULL begin RAISERROR (15600,1,1, 'Temp name sudah digunakan.') RETURN end set @SQL='select * into '+@TempName+' from '+@ LocalTable+' where 1=0' buat tabel #LocalDates ( ColName varchar(20), DTS datetime) set @sql='insert into #LocalDates pilih ''Created'', maks(CreatedDate) dari '+@LocalTable exec (@sql ) atur @sql='insert into #LocalDates pilih ''Modified'', max(LastModifiedDate) dari '+@LocalTable exec (@sql) pilih @MaxCreated=DTS dari #LocalDates di mana ColName='Created' pilih @MaxModified=DTS dari #LocalDates where ColName='Modified' drop table #LocalDates set @SQL='select * into '+@TempName+' from openquery('+@Link+',''select * from '+@Remote+' where CreatedDate>{ts '''''+convert(varchar(22),@MaxCreated,120)+'''''}'')' exec(@SQL) exec SFAppe ndFromTemp @LocalTable, @TempName set @SQL='drop table '+@TempName exec (@SQL) set @SQL='select * into '+@TempName+' from openquery('+@Link+',''select * from ' +@Remote+' di mana LastModifiedDate>{ts'''''+convert(varchar(22),@MaxModified,120)+'''''} dan CreatedDate<={ts'''''+convert(varchar( 22),@MaxCreated,120)+'''''}'')' exec (@SQL) exec SFAppendFromTemp @LocalTable, @TempName set @SQL='drop table '+@TempName exec (@SQL) akhiri prosedur pembuatan SFAppendFromTemp(@Local varchar(50), @TempName varchar(50)) as start /* Menggunakan tabel temp untuk mengimpor data ke tabel lokal memastikan semua duplikat dihapus terlebih dahulu */ mendeklarasikan @Columns nvarchar(max) mendeklarasikan @ ColName varchar(50) mendeklarasikan @SQL nvarchar(max) set @sql='hapus dari '+@Local+' di mana Id masuk ( pilih Id dari '+@TempName+')' exec (@SQL) set @Columns='' mendeklarasikan kursor col_cursor untuk memilih syscolumns.name dari sysobjects dalam bergabung dengan syscolumns di sysobjects.id =syscolumns.id di mana sysobjects.xtype ='u' dan sysobjects.name =@Local buka col_cursor selanjutnya dari @ col_cursor ColName while @@FETCH_STATUS=0 Mulai set @Columns=@Columns+'['+@ColName+']' ambil berikutnya dari col_cursor ke @ColName jika (@@FETCH_STATUS=0) set @Columns=@Columns+', ' End close col_cursor deallocate col_cursor set @sql='insert into '+@Local+' (' +@Columns+') pilih '+@Columns+' from '+@TempName exec (@sql) end -- Dua prosedur digunakan untuk mendapatkan data dari meja jarak jauh. 1) SFUpdateTable, yang -- menyalin data ke tabel sementara. 2) SFAppendFromTemp, yang menambahkan -- data dari tabel sementara ke tabel lokal. -- @Link Nama server tertaut SQL Server Anda -- @Remote Nama tabel dalam Salesforce -- @Local Tabel lokal tempat Anda ingin menyimpan data -- @TempName Nama tabel yang dapat digunakan untuk menyimpan data sementara. Jangan -- gunakan nama tabel sementara yang sebenarnya seperti #temp, ini tidak akan berfungsi.

Untuk menguji ini, jalankan:

SFUpdateTable 'SF8','Account','LocalAccount'

Contoh ini dapat digunakan dengan tabel Salesforce apa pun yang dapat diakses pengguna.

Validasi Skema Malas

Di properti server tertaut SQL Server Anda, di bawah bagian "Opsi Server", ada opsi untuk "Validasi Skema Malas". Secara default, ini diatur ke FALSE, yang menyebabkan SQL Server mengirim pernyataan SELECT dua kali. Saat pertama kali kueri dikirim, SQL Server menggunakan detail yang dikirimkan kembali untuk membangun metadata tentang kumpulan hasil Anda. Kemudian kueri dikirim lagi. Ini adalah biaya tambahan yang cukup mahal, jadi Easysoft akan merekomendasikan agar Anda menyetel "Validasi Skema Malas" ke TRUE, yang berarti hanya satu kueri yang dikirim, mengambil metadata dan hasil yang ditetapkan dalam sekali jalan. Ini juga menghemat jumlah panggilan API Salesforce yang dilakukan.

Batasan OLEDB Microsoft untuk Penyedia ODBC

Detail tentang batasan OLEDB untuk Penyedia ODBC dapat ditemukan di:

https://msdn.microsoft.com/en-us/library/ms719628(v=vs.85).aspx

Bagaimana cara menemukan catatan dengan umpan baris (baris baru) di alamat penagihan?

Dengan menggunakan beberapa fungsi internal driver Easysoft, Anda dapat dengan mudah menemukan catatan di mana alamat penagihan memiliki umpan baris di dalam catatan. Misalnya:

select * from openquery(sf8,'select Id, Name, {fn POSITION({fn CHAR(10)} IN BillingStreet)} LinePos from Account where {fn POSITION({fn CHAR(10)} IN BillingStreet)} >0')

POSITION(x) Fungsi ini mencari posisi x dalam kolom yang ditentukan.

CHAR(X) Fungsi ini mengembalikan karakter dengan nilai ASCII x .

Informasi lebih lanjut tentang fungsi yang tersedia di driver ODBC Salesforce kami dapat ditemukan di sini

Dapatkah saya melihat tabel mana yang tersedia melalui perangkat lunak Easysoft?

Untuk mendapatkan daftar tabel yang dapat Anda akses, jalankan:

select * from openquery(SF8,'select TABLE_NAME from INFO_SCHEMA.TABLES')

Dapatkah saya melihat kolom mana yang tersedia melalui perangkat lunak Easysoft?

Anda bisa mendapatkan daftar kolom yang ada di tabel dengan menjalankan:

pilih * dari openquery(SF8,'select * from INFO_SCHEMA.COLUMNS where TABLE_NAME=''Account'' ')

Dengan menggunakan metode ini, Anda hanya bisa mendapatkan daftar kolom milik tabel yang Anda tentukan di klausa TABLE_NAME WHERE. Jika Anda ingin melihat daftar lengkap kolom untuk semua tabel, jalankan:

mulai mendeklarasikan @Table nvarchar(max) mendeklarasikan kursor table_cursor untuk memilih TABLE_NAME dari openquery(SF8,'pilih TABLE_NAME dari INFO_SCHEMA.TABLES') buka table_cursor ambil berikutnya dari table_cursor ke @Table sementara @@FETCH_STATUS=0 Mulai exec (' pilih * dari INFO_SCHEMA.COLUMNS where TABLE_NAME=?', @Table) di SF8 ambil selanjutnya dari table_cursor ke @Table End close table_cursor deallocate table_cursorend

Dapatkah saya membuat server tertaut secara terprogram?

Ya. Ada banyak contoh tentang ini di web, misalnya:

http://www.sqlservercentral.com/articles/Linked+Servers/142270/?utm_source=SSC


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Secara terprogram mengambil sumber prosedur tersimpan SQL Server yang identik dengan sumber yang dikembalikan oleh gui SQL Server Management Studio?

  2. Apa itu Operator Logika IN di SQL Server - Tutorial SQL Server / TSQL Bagian 122

  3. Metode Ekspor dan Impor Tabel Database SQL Server

  4. Hubungkan SAP IQ ke SQL Server

  5. Ubah Bahasa Default Login di SQL Server