Udostępnij za pomocą


Widoki kompatybilności systemu (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricHurtownia danych w usłudze Microsoft FabricBaza danych SQL w usłudze Microsoft Fabric

Wiele tabel systemowych z wcześniejszych wersji SQL Server jest obecnie zaimplementowanych jako zestaw widoków. Te widoki nazywane są widokami zgodności i mają na celu jedynie kompatybilność wsteczną. Widoki kompatybilności ujawniają te same metadane dostępne w SQL Server 2000 (8.x). Jednak widoki kompatybilności nie ujawniają żadnych metadanych związanych z funkcjami wprowadzonymi w SQL Server 2005 (9.x) i późniejszych. Dlatego gdy korzystasz z nowych funkcji, takich jak Service Broker czy partycjonowanie, musisz przejść na korzystanie z widoków katalogowych.

Innym powodem aktualizacji do widoków katalogowych jest to, że kolumny widoku kompatybilności, które przechowują identyfikatory użytkowników i identyfikatory typów, mogą zwracać NULL lub wywoływać przepełnienia arytmetyczne. Wynika to z faktu, że możesz stworzyć ponad 32 767 użytkowników, grup i ról oraz 32 767 typów danych. Na przykład, jeśli utworzysz 32 768 użytkowników, a następnie wykonasz następujące zapytanie: SELECT * FROM sys.sysusers. Jeśli ARITHABORT jest ustawiony na ON, zapytanie kończy się niepowodzeniem z błędem przepełnienia arytmetycznego. Jeśli ARITHABORT jest ustawiony na WYŁĄCZONE, kolumna uid zwraca NULL.

Aby uniknąć tych problemów, zalecamy korzystanie z nowych widoków katalogowych, które pomogą obsłużyć zwiększoną liczbę identyfikatorów użytkowników i typów. Poniższa tabela przedstawia kolumny, które podlegają temu przepełnieniu.

Nazwa kolumny Widok zgodności SQL Server 2005 view
xusertype syscolumns sys.columns
Typ użytkownika syscolumns sys.columns
memberuid Członkowie systemu sys.database_role_members
groupuid Członkowie systemu sys.database_role_members
Uid sysobjects sys.objects
Uid sysprotects sys.database_permissions

sys.server_permissions
Grantor 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
Gid Sysusers sys.database_principals
Uid syscacheobjects sys.dm_exec_plan_attributes
Uid Procesy sysprocesowe sys.dm_exec_requests

Po odwołaniu w bazie danych użytkownika, tabele systemowe, które w SQL Server 2000 były ogłoszone jako przestarzałe (takie jak syslanguages czy syscacheobjects), są teraz powiązane z widokiem kompatybilności wstecznej w schemacie systemu . Ponieważ tabele systemowe SQL Server 2000 zostały wycofane na wiele wersji, ta zmiana nie jest uznawana za zmianę przełamującą.

Przykład: Jeśli użytkownik utworzy tabelę użytkownika o nazwie syslanguages w bazie danych użytkownika, w SQL Server 2008 zdanie SELECT * from dbo.syslanguages; w tej bazie danych zwraca wartości z tabeli użytkownika. Począwszy od SQL Server 2012, praktyka ta będzie zwracać dane z widoku systemowego sys.syslanguages.

Zobacz też

Widoki Katalogu (Transact-SQL)
Mapowanie tabel systemowych na widoki systemowe (Transact-SQL)