일반 ADO를 사용하여 SQL Server에서 뷰 정의를 검색하는 방법이 있습니까? OpenSchema()이 테이블에 대한 열

OpenSchema()다양한 구현에서 ADO 연결 호출을 사용하여 SQL 서버에서 호스팅되는 데이터베이스에서 열 정의를 성공적으로 추출하여 다른 SQL 데이터베이스에서 이러한 테이블을 프로그래밍 방식으로 다시 만들 수 있습니다. 여태까지는 그런대로 잘됐다.

위 테이블과의 주요 상호 작용은 여러보기를 사용하여 발생합니다. 동안 OpenSchema()이 테이블에 대한 열 정의를 반환하는 같은 방법으로 뷰의 열 정의를 반환 할 수있는 정보의 중요한 비트 누락 – 뷰에서 열이 매핑되는 기본 테이블에있는 테이블 및 열.

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

“ColumnX가 테이블 Z의 ColumnY에 매핑”이라는 방식으로 또는보기를 만드는 데 사용 된 실제 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를 전달하여 N문자로 결과를 얻을 수 있습니다 .


답변

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_name
보기 : 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');


답변