Saya berhasil mengekstrak definisi kolom dari database yang dihosting di server SQL menggunakan OpenSchema()
panggilan ADO Connection dalam berbagai inkarnasinya sehingga saya dapat membuat ulang tabel tersebut secara terprogram di database SQL lain. Sejauh ini bagus.
Interaksi utama dengan tabel di atas terjadi menggunakan beberapa tampilan; sementara OpenSchema()
dapat mengembalikan definisi kolom untuk tampilan dengan cara yang sama seperti mengembalikan definisi kolom untuk tabel, ada sedikit informasi penting yang hilang - tabel dan kolom mana di tabel yang mendasari kolom dalam tampilan peta.
Saya mencoba mengakses perintah SQL yang digunakan untuk membuat tampilan menggunakan Tampilan Katalog ADOX, tetapi tampaknya driver OLEDB untuk SQL Server yang kami gunakan tidak mendukung fungsi ini.
Apakah ada cara untuk mendapatkan informasi ini untuk konfigurasi tampilan melalui ADO, baik dengan cara yang menyatakan "ColumnX memetakan ke KolomY di tabel Z" atau dalam bentuk perintah SQL sebenarnya yang digunakan untuk membuat tampilan?
sumber
select m.definition from sys.sql_modules m where m.object_id = object_id('dbo.MyView', 'V')
sys.sql_modules
mendefinisikan kolom sebagai berikut:definition nvarchar(max) SQL text that defines this module. NULL = Encrypted.
[n][var]char
data dipotong menjadi 256 karakter. Anda dapat mengubahnya melalui menu diQuery..Query Options...
& mdash; Dari dialog modal berikutnya, telusuri keResults>Text
node di kontrol pohon di sisi kiri.Microsoft mencantumkan metode berikut ini untuk mendapatkan definisi Tampilan: http://technet.microsoft.com/en-us/library/ms175067.aspx
USE AdventureWorks2012; GO SELECT definition, uses_ansi_nulls, uses_quoted_identifier, is_schema_bound FROM sys.sql_modules WHERE object_id = OBJECT_ID('HumanResources.vEmployee'); GO
USE AdventureWorks2012; GO SELECT OBJECT_DEFINITION (OBJECT_ID('HumanResources.vEmployee')) AS ObjectDefinition; GO
sumber
Untuk pengguna SQL 2000, perintah sebenarnya yang akan memberikan informasi ini adalah:
select c.text from sysobjects o join syscomments c on c.id = o.id where o.name = '<view_name_here>' and o.type = 'V'
sumber
SELECT object_definition (OBJECT_ID(N'dbo.vEmployee'))
sumber
Anda bisa mendapatkan detail tabel / tampilan melalui kueri di bawah ini.
Untuk tabel: sp_help nama_tabel Untuk Tampilan: sp_help view_name
sumber
SELECT definition, uses_ansi_nulls, uses_quoted_identifier, is_schema_bound FROM sys.sql_modules WHERE object_id = OBJECT_ID('your View Name');
sumber
Contoh ini: Kumpulan Tampilan, Contoh Properti CommandText (VB) Menunjukkan cara menggunakan ADOX untuk mempertahankan VIEWS dengan mengubah COMMAND yang terkait dengan VIEW. Tapi malah menggunakannya seperti ini:
Set cmd = cat.Views("AllCustomers").Command ' Update the CommandText of the command. cmd.CommandText = _ "Select CustomerId, CompanyName, ContactName From Customers"
coba saja pakai cara ini:
Set CommandText = cat.Views("AllCustomers").Command.CommandText
sumber