programing

플레인 ADO를 사용하여 SQL Server에서 뷰 정의를 가져오는 방법이 있습니까?

javamemo 2023. 4. 20. 19:38
반응형

플레인 ADO를 사용하여 SQL Server에서 뷰 정의를 가져오는 방법이 있습니까?

ADO Connection을 사용하여 SQL 서버에서 호스트되는 데이터베이스에서 열 정의를 추출하는 중입니다.OpenSchema()이러한 테이블을 다른 SQL 데이터베이스에 프로그래밍 방식으로 다시 만들 수 있도록 다양한 기능을 호출합니다.지금까지는 좋아.

위의 표와의 주요 상호작용은 여러 뷰를 사용하여 이루어집니다.OpenSchema()는 테이블의 열 정의를 반환하는 것과 같은 방법으로 뷰의 열 정의를 반환할 수 있습니다.중요한 비트의 정보가 누락되어 있습니다.즉, 뷰의 열이 기본 테이블의 어느 테이블과 컬럼에 매핑되는지입니다.

ADOX 카탈로그 보기를 사용하여 보기를 만드는 데 사용된 SQL 명령에 액세스하려고 했지만, 사용 중인 SQL Server용 OLEDB 드라이버가 이 기능을 지원하지 않는 것 같습니다.

"Column X maps to Column Y in table Z" 또는 뷰 작성에 사용되는 실제 SQL 명령 형식으로 ADO를 통해 뷰 구성에 대한 이 정보를 얻을 수 있는 방법이 있습니까?

SQL Server 버전

SQL Server 2005 이후에서는 다음과 같은 뷰를 작성하는 데 사용되는 SQL 스크립트를 얻을 수 있습니다.

select definition
from sys.objects     o
join sys.sql_modules m on m.object_id = o.object_id
where o.object_id = object_id( 'dbo.MyView')
  and o.type      = 'V'

뷰 작성/변경에 사용되는 스크립트를 포함하는 단일 행을 반환합니다.

표의 다른 열에는 보기를 컴파일할 때 사용 중인 옵션에 대한 정보가 표시됩니다.

주의사항

  • 뷰가 ALTER VIEW를 사용하여 마지막으로 변경된 경우 스크립트는 CREATE VIEW 문이 아닌 ALTER VIEW 문이 됩니다.

  • 스크립트에는 작성 시 이름이 반영됩니다.ALTER VIEW를 실행하거나 CREATE VIEW를 사용하여 보기를 삭제 및 재생성하는 경우에만 업데이트됩니다.뷰의 이름이 변경된 경우(예:sp_rename) 또는 소유권이 다른 스키마에 이전된 경우 원래 CREATE/ALTER VIEW 문이 반환됩니다.이 스크립트는 오브젝트의 현재 이름을 반영하지 않습니다.

  • 일부 도구는 출력을 잘라냅니다.예를 들어 MS-SQL 명령줄 도구 sqlcmd가 있습니다.exe는 데이터를 255자로 잘라냅니다.매개 변수를 전달할 수 있습니다.-y N결과를 얻다Ndiscloss(캐릭터)

Microsoft 에서는, 다음의 방법으로 View 정의를 취득했습니다.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

EXEC sp_helptext 'HumanResources.vEmployee';

SQL 2000 사용자에게 이 정보를 제공하는 실제 명령어는 다음과 같습니다.

select c.text
from sysobjects     o
join syscomments    c on c.id = o.id
where o.name = '<view_name_here>'
  and o.type      = 'V'
SELECT object_definition (OBJECT_ID(N'dbo.vEmployee'))

아래 쿼리를 통해 테이블/뷰 세부 정보를 얻을 수 있습니다.

테이블:sp_help table_nameFor View:sp_help view_name

SELECT definition, uses_ansi_nulls, uses_quoted_identifier, is_schema_bound  
FROM sys.sql_modules  
WHERE object_id = OBJECT_ID('your View Name');  

다음 예시는 다음과 같습니다.뷰 컬렉션, 명령어텍스트 속성 예제(VB) ADOX를 사용하여 VIEW와 관련된 COMMAND를 변경하여 VIEWS를 유지하는 방법을 보여줍니다.대신 다음과 같이 사용합니다.

 Set cmd = cat.Views("AllCustomers").Command  

' Update the CommandText of the command.  
cmd.CommandText = _  
"Select CustomerId, CompanyName, ContactName From Customers"  

다음과 같은 방법으로 사용해 보십시오.

Set CommandText = cat.Views("AllCustomers").Command.CommandText

언급URL : https://stackoverflow.com/questions/4765323/is-there-a-way-to-retrieve-the-view-definition-from-a-sql-server-using-plain-ado

반응형