Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza 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)