Sdílet prostřednictvím


Pohledy na kompatibilitu systému (Transact-SQL)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Koncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

Mnoho systémových tabulek z dřívějších verzí SQL Serveru je nyní implementováno jako sada pohledů. Tyto pohledy se nazývají kompatibilní pohledy a jsou určeny pouze pro zpětnou kompatibilitu. Kompatibilní pohledy ukazují stejná metadata, která byla dostupná v SQL Server 2000 (8.x). Pohledy kompatibility však nezveřejňují žádná metadata týkající se funkcí, které byly představeny v SQL Server 2005 (9.x) a novějších. Proto když používáte nové funkce, jako je Service Broker nebo partitioning, musíte přejít na katalogové pohledy.

Dalším důvodem pro upgrade na katalogové zobrazení je, že sloupce kompatibilitního pohledu, které ukládají uživatelská ID a typová ID, mohou vracet NULL nebo vyvolat aritmetické přetečení. Je to proto, že můžete vytvořit více než 32 767 uživatelů, skupin a rolí a 32 767 datových typů. Například pokud byste vytvořili 32 768 uživatelů a poté spustili následující dotaz: SELECT * FROM sys.sysusers. Pokud je ARITHABORT nastaven na ON, dotaz selže s chybou aritmetického přetečení. Pokud je ARITHABORT nastaven na VYPNUTO, sloupec uid vrátí NULL.

Abychom se těmto problémům vyhnuli, doporučujeme používat nové katalogové pohledy, které zvládnou zvýšený počet uživatelských ID a typových ID. Následující tabulka uvádí sloupce, které podléhají tomuto přetečení.

Název sloupce Pohled na kompatibilitu Pohled SQL Server 2005
xusertype syscolumns sys.columns
Uživatelský typ syscolumns sys.columns
memberuid Členové systému sys.database_role_members
Groupuid Členové systému sys.database_role_members
Uid Sysobjects sys.objects
Uid sysprotects sys.database_permissions

sys.server_permissions
postupitel sysprotects sys.database_permissions

sys.server_permissions
xusertype Systypy sys.types
Uid Systypy sys.types
Uid Sysusers sys.database_principals
altuid Sysusers sys.database_principals
motoličnost Sysusers sys.database_principals
Uid syscacheobjects sys.dm_exec_plan_attributes
Uid Sysprocesses sys.dm_exec_requests

Při odkazování v uživatelské databázi jsou systémové tabulky, které byly v SQL Server 2000 oznámeny jako zastaralé (například syslanguages nebo syscacheobject), nyní vázány na pohled zpětné kompatibility v sys schématu. Protože tabulky SQL Server 2000 byly ukončeny pro více verzí, tato změna není považována za zlomovou změnu.

Příklad: Pokud uživatel vytvoří uživatelskou tabulku nazvanou syslanguages v uživatelské databázi v SQL Server 2008, příkaz SELECT * from dbo.syslanguages; v této databázi vrátí hodnoty z uživatelské tabulky. Od SQL Server 2012 tato praxe vracejí data ze sys.syslanguages v systémovém zobrazení.

Viz také

zobrazení katalogu (Transact-SQL)
Mapování systémových tabulek na systémové pohledy (Transact-SQL)