시스템 호환성 뷰(Transact-SQL)

적용 대상:SQL Server

SQL Server 이전 릴리스의 많은 시스템 테이블이 이제 뷰 집합으로 구현됩니다. 이러한 뷰를 호환성 뷰라고 하며 이전 버전과의 호환성을 위해서만 제공됩니다. 호환성 보기는 SQL Server 2000(8.x)에서 사용할 수 있었던 것과 동일한 메타데이터를 노출합니다. 그러나 호환성 뷰는 SQL Server 2005(9.x) 이상에서 도입된 기능과 관련된 메타데이터를 노출하지 않습니다. 따라서 Service Broker 또는 분할과 같은 새 기능을 사용하는 경우 카탈로그 뷰를 사용하여 로 전환해야 합니다.

카탈로그 뷰로 업그레이드해야 하는 또 다른 이유는 사용자 ID 및 유형 ID를 저장하는 호환성 뷰 열이 NULL을 반환하거나 산술 오버플로를 트리거할 수 있기 때문입니다. 이것은 사용자, 그룹 및 역할과 데이터 형식을 32,767개 이상 만들 수 있기 때문입니다. 예를 들어 32,768명의 사용자를 만든 다음 쿼리 SELECT * FROM sys.sysusers를 실행합니다. ARITHABORT를 ON으로 설정하는 경우 산술 오버플로 오류가 발생하여 쿼리가 실패하게 되고 ARITHABORT가 OFF로 설정된 경우 uid 열은 NULL을 반환합니다.

이러한 문제를 피하려면 증가된 사용자 ID 및 유형 ID 수를 처리할 수 있는 새로운 카탈로그 뷰를 사용하는 것이 좋습니다. 다음 표에서는 이 오버플로를 트리거할 수 있는 열을 나열합니다.

열 이름 호환성 뷰 SQL Server 2005 뷰
xusertype syscolumns sys.columns
usertype syscolumns sys.columns
memberuid sysmembers sys.database_role_members
groupuid sysmembers sys.database_role_members
Uid sysobjects sys.objects
Uid sysprotects sys.database_permissions

sys.server_permissions
양도인 sysprotects sys.database_permissions

sys.server_permissions
xusertype systypes sys.types
Uid systypes sys.types
Uid sysusers sys.database_principals
altuid sysusers sys.database_principals
gid sysusers sys.database_principals
Uid syscacheobjects sys.dm_exec_plan_attributes
Uid sysprocesses sys.dm_exec_requests

사용자 데이터베이스에서 참조되는 경우 SQL Server 2000에서 더 이상 사용되지 않는 것으로 발표된 시스템 테이블(예: syslanguages 또는 syscacheobjects)은 이제 sys 스키마의 백 호환성 보기에 바인딩됩니다. SQL Server 2000 시스템 테이블이 여러 버전에서 더 이상 사용되지 않으므로 이는 새로운 변경 사항이 아닙니다.

예: 사용자가 2008년 SQL Server 사용자 데이터베이스에서 syslanguages라는 사용자 테이블을 만드는 경우 해당 데이터베이스의 문 SELECT * from dbo.syslanguages; 은 사용자 테이블의 값을 반환합니다. 2012년 SQL Server 이 사례는 시스템 뷰 sys.syslanguages에서 데이터를 반환합니다.

참고 항목

카탈로그 뷰(Transact-SQL)
시스템 테이블을 시스템 뷰로 매핑(Transact-SQL)