Z powodzeniem wyodrębniam definicje kolumn z baz danych hostowanych na serwerze SQL przy użyciu OpenSchema()
wywołania ADO Connection w różnych jego wcieleniach, dzięki czemu mogę programowo odtworzyć te tabele w innej bazie danych SQL. Na razie w porządku.
Główna interakcja z powyższymi tabelami odbywa się przy użyciu wielu widoków; chociaż OpenSchema()
jest w stanie zwrócić definicje kolumn dla widoku w ten sam sposób, w jaki zwraca definicje kolumn dla tabeli, brakuje kluczowej części informacji - do której tabeli i kolumny w tabelach bazowych jest odwzorowywana kolumna w widoku.
Próbowałem uzyskać dostęp do polecenia SQL używanego do tworzenia widoku za pomocą widoków katalogu ADOX, ale wydaje się, że sterownik OLEDB dla SQL Server, którego używamy, nie obsługuje tej funkcji.
Czy istnieje sposób, aby uzyskać te informacje dotyczące konfiguracji widoku za pośrednictwem ADO, czy to w sposób, który stwierdza, że „KolumnaX odwzorowuje kolumnęY w tabeli Z” lub w postaci rzeczywistego polecenia SQL użytego do utworzenia widoku?
źródło
select m.definition from sys.sql_modules m where m.object_id = object_id('dbo.MyView', 'V')
sys.sql_modules
definiuje kolumnę w następujący sposób:definition nvarchar(max) SQL text that defines this module. NULL = Encrypted.
[n][var]char
dane są obcinane do 256 znaków. Możesz to zmienić za pomocą menu pod adresemQuery..Query Options...
& mdash; W następnym modalnym oknie dialogowym przejdź doResults>Text
węzła w kontrolce drzewa po lewej stronie.Firma Microsoft wymieniła następujące metody uzyskiwania definicji widoku: 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
źródło
W przypadku użytkowników SQL 2000 rzeczywiste polecenie, które dostarczy te informacje, to:
select c.text from sysobjects o join syscomments c on c.id = o.id where o.name = '<view_name_here>' and o.type = 'V'
źródło
SELECT object_definition (OBJECT_ID(N'dbo.vEmployee'))
źródło
Możesz uzyskać szczegóły tabeli / widoku za pomocą poniższego zapytania.
W przypadku tabeli: sp_help nazwa_tabeli W przypadku widoku: sp_help nazwa_widoku
źródło
SELECT definition, uses_ansi_nulls, uses_quoted_identifier, is_schema_bound FROM sys.sql_modules WHERE object_id = OBJECT_ID('your View Name');
źródło