다음을 통해 공유


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

적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW) Microsoft Fabric의 SQL 분석 엔드포인트 Microsoft Fabric의 웨어하우스

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

카탈로그 뷰로 업그레이드하는 또 다른 이유는 사용자 ID 및 형식 ID를 저장하는 호환성 보기 열이 NULL을 반환하거나 산술 오버플로를 트리거할 수 있기 때문입니다. 32,767명 이상의 사용자, 그룹 및 역할 및 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 시스템 테이블은 여러 버전에서 더 이상 사용되지 않으므로 이 변경 내용은 호환성이 손상되는 변경으로 간주되지 않습니다.

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

참고 항목

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