Megosztás a következőn keresztül:


Rendszerkompatibilitás nézetek (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Az SQL Server korábbi kiadásaiból származó rendszertábla sok most már nézetek halmazaként van megvalósítva. Ezeket a nézeteket kompatibilitási nézeteknek nevezik, és csak visszafelé való kompatibilitásra szolgálnak. A kompatibilitási nézetek ugyanazokat a metaadatokat tárják fel, amelyek az SQL Server 2000-ben (8.x) elérhetők voltak. Azonban a kompatibilitási nézetek nem fedik fel az SQL Server 2005 (9.x) és későbbi verziókban bevezetett funkciókhoz kapcsolódó metaadatokat. Ezért, amikor új funkciókat használsz, mint például Service Broker vagy partíció, át kell váltanod a katalógusnézetekre.

Egy másik ok a katalógusnézetekre való frissítésnek, hogy a kompatibilitási nézetű oszlopok, amelyek felhasználói azonosítókat és típusazonosítókat tárolnak, NULL-t adhatnak vissza, vagy aritmetikai túlcsordulásokat indíthatnak el. Ennek oka, hogy több mint 32 767 felhasználót, csoportot és szerepet, valamint 32 767 adattípust tudsz létrehozni. Például, ha 32 768 felhasználót hoznánk létre, majd a következő lekérdezést futtatnánk: SELECT * FROM sys.sysusers. Ha az ARITHABORT ON-ra van állítva, a lekérdezés aritmetikai túlömlés hibával bukik el. Ha az ARITHABORT OFF-ra van állítva, az uid oszlop NULL-t ad vissza.

E problémák elkerülése érdekében javasoljuk, hogy használja az új katalógusnézeteket, amelyek képesek kezelni a megnövekedett felhasználói azonosítók és típusazonosítók számát. Az alábbi táblázat felsorolja azokat az oszlopokat, amelyek ennek a túlcsordulásnak vannak kitéve.

Oszlop név Kompatibilitási nézet SQL Server 2005 nézet
xusertype syscolumns sys.columns
usertype syscolumns sys.columns
memberuid Rendszertagok sys.database_role_members
Groupuid Rendszertagok sys.database_role_members
Uid sysobjects sys.objects
Uid sysprotect sys.database_permissions

sys.server_permissions
Adományozó sysprotect sys.database_permissions

sys.server_permissions
xusertype Systípusok sys.types
Uid Systípusok 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 sysprocessesek sys.dm_exec_requests

Ha használóadatbázisban hivatkoznak rájuk, azok a rendszer táblák, amelyeket az SQL Server 2000-ben elavultnak jelentettek (például syslanguages vagy syscacheobjects), most a rendszerşem vissza-kompatibilitási nézetéhez vannak kötve. Mivel az SQL Server 2000 rendszertábláit több verzióra is lejáratták az időből, ezt a változást nem tekintik megszakító változásnak.

Példa: Ha egy felhasználó létrehoz egy syslanguages nevű felhasználói táblát egy felhasználói adatbázisban, az SQL Server 2008-ban az adott adatbázisban lévő utasítás SELECT * from dbo.syslanguages; visszaadja a felhasználói tábla értékeit. Az SQL Server 2012-től kezdve ez a gyakorlat a sys.syslanguages rendszernézetű adatait eredményezi.

Lásd még:

katalógusnézetek (Transact-SQL)
Rendszertáblák leképezése rendszernézetekhez (Transact-SQL)