Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
A számított oszlopok indexeit a következő követelmények teljesülése után határozhatja meg:
- Tulajdonosi követelmények
- Determinizmusra vonatkozó követelmények
- Pontossági követelmények
- Adattípusra vonatkozó követelmények
- SET opció követelmények
Megjegyzés:
SET QUOTED_IDENTIFIER akkor kell lennie ON , ha számított oszlopokon vagy indexelt nézeteken hoz létre vagy módosít indexeket. További információ: SET QUOTED_IDENTIFIER (Transact-SQL).
Tulajdonosi követelmények
A számított oszlopban lévő összes függvényhivatkozásnak ugyanazzal a tulajdonossal kell rendelkeznie, mint a táblának.
Determinizmusra vonatkozó követelmények
A kifejezések determinisztikusak, ha mindig ugyanazt az eredményt adnak vissza egy megadott bemenethez. A IsDeterministicCOLUMNPROPERTY függvény tulajdonsága azt jelzi, hogy egy computed_column_expression determinisztikus-e.
A computed_column_expression determinisztikusnak kell lennie. A computed_column_expression determinisztikus, ha az alábbiak mindegyike igaz:
A kifejezés által hivatkozott összes függvény determinisztikus és pontos. Ezek a függvények magukban foglalják a felhasználó által definiált és a beépített függvényeket is. További információ: Determinisztikus és Nemdeterminista függvények. A függvények pontatlanok lehetnek, ha a számított oszlop .
PERSISTEDTovábbi információ: Indexek létrehozása a tartósan számított oszlopokon a jelen cikk késői részében.A kifejezésben hivatkozott összes oszlop a számított oszlopot tartalmazó táblából származik.
Egyetlen oszlophivatkozás sem kér le adatokat több sorból. Például az olyan összesítő függvények, mint
SUMvagyAVG, több sorból származó adatoktól függnek, és ez computed_column_expression-t nem determinisztikussá teszi.A computed_column_expression nem rendelkezik rendszeradatokhoz vagy felhasználói adatokhoz való hozzáféréssel.
Minden olyan számított oszlopnak, amely közös nyelvi futtatókörnyezeti (CLR) kifejezést tartalmaz, determinisztikusnak kell lennie, és meg kell jelölnie PERSISTED az oszlop indexelése előtt. A CLR felhasználó által definiált típuskifejezések a számított oszlopdefiníciókban engedélyezettek. A felhasználó által definiált CLR-típust használó számított oszlopok indexelhetők, amíg a típus összehasonlítható. További információért lásd: CLR felhasználó által definiált típusok.
CAST és CONVERT
Ha az SQL Server számított, indexelt oszlopaiban a dátum adattípusának szöveges literáljára hivatkozik, javasoljuk, hogy a literált explicit módon konvertálja a kívánt dátumtípusra egy determinisztikus dátumformátum használatával. A determinisztikus dátumformátum-stílusok listáját a CAST és a CONVERT című témakörben találja.
További információ: A konstans dátumsztringek dátumértékekké való nemdeterminisztikus átalakítása.
Kompatibilitási szint
A nem Unicode karakteradatok rendezések közötti implicit konvertálása nem determinisztikusnak tekinthető, kivéve, ha a kompatibilitási szintet 0-ra vagy korábbanira állítják.
Az adatbázis-kompatibilitási szint beállítása 90esetén nem hozhat létre indexeket az ezeket a kifejezéseket tartalmazó számított oszlopokon. A frissített adatbázisból származó kifejezéseket tartalmazó meglévő számított oszlopok azonban karbantarthatók. Ha olyan indexelt számított oszlopokat használ, amelyek implicit stringről dátumra történő konvertálásokat tartalmaznak, az index esetleges sérülésének elkerülése érdekében győződjön meg arról, hogy a LANGUAGE és DATEFORMAT beállítások konzisztensek az adatbázisokban és az alkalmazásokban.
A kompatibilitási szint 90 az SQL Server 2005 -nek (9.x) felel meg.
Pontossági követelmények
A computed_column_expression pontosnak kell lennie. A computed_column_expression akkor pontosak, ha az alábbiak közül egy vagy több igaz:
Ez nem a lebegőpontos vagy valós adattípusok kifejezése.
Nem használ lebegőpontos vagy valós adattípust a definíciójában. Az alábbi utasításban például az oszlop
yint és determinisztikus, de nem pontos.CREATE TABLE t2 (a int, b int, c int, x float, y AS CASE x WHEN 0 THEN a WHEN 1 THEN b ELSE c END);
Megjegyzés:
A lebegőpontos vagy valós kifejezés nem tekinthető pontatlannak, és nem lehet index kulcsa; a lebegőpontos vagy valós kifejezés indexelt nézetben használható, kulcsként azonban nem. Ez a számított oszlopokra is igaz. A függvények, kifejezések vagy felhasználó által definiált függvények pontatlannak minősülnek, ha lebegőpontos vagy valós kifejezéseket tartalmaznak. Ez magában foglalja a logikai elemeket (összehasonlításokat).
A IsPrecise függvény tulajdonsága jelzi, COLUMNPROPERTY hogy egy computed_column_expression pontos-e.
Adattípusra vonatkozó követelmények
- A számított oszlophoz definiált computed_column_expression nem lehet kiértékelni a szöveg, az ntext vagy a kép adattípusát.
- A képből, ntextből, szövegből, varchar(max), nvarchar(max), varbinary(max) és XML-adattípusokból származó számított oszlopok indexelhetők mindaddig, amíg a számított oszlop adattípusa indexkulcsoszlopként engedélyezhető.
- A kép-, ntext- és szöveges adattípusokból származtatott számított oszlopok lehetnek nem kulcsalapú (belefoglalt) oszlopok egy nemclustered indexben, feltéve, hogy a számított oszlop adattípusa nem kulcsalapú indexoszlopként engedélyezhető.
SET beállítási követelmények
A
ANSI_NULLSkapcsolatszintű beállítást akkor kellONállítani, amikor a számított oszlopot meghatározóCREATE TABLEvagyALTER TABLEutasítást végrehajtják. Az OBJECTPROPERTY függvény azt jelzi, hogy a beállítás be van-e kapcsolva aIsAnsiNullsOntulajdonságon keresztül.A kapcsolatnak, amelyen az index létrejön, valamint az összes olyan kapcsolatnak, amely
INSERT,UPDATE, vagyDELETEutasításokat próbál végrehajtani, amelyek módosítják az index értékeit, hatSETbeállítássalONmódon kell rendelkeznie, és egy beállításnakOFFmódon kell lennie beállítva. Az optimalizáló figyelmen kívül hagyja a számított oszlop indexét minden olyanSELECTutasítás esetében, amelyet egy olyan kapcsolat hajt végre, amely nem rendelkezik ugyanezekkel a beállítási beállításokkal.A
NUMERIC_ROUNDABORTbeállítást a következő értékreOFFkell állítani, és a következő beállításokat kell beállítaniON:ANSI_NULLSANSI_PADDINGANSI_WARNINGSARITHABORTCONCAT_NULL_YIELDS_NULLQUOTED_IDENTIFIER
Megjegyzés:
A ANSI_WARNINGS beállítása ON értékre implicit módon beállítja a ARITHABORT-t ON-re, ha az adatbázis kompatibilitási szintje 90 vagy magasabb.
Indexek létrehozása a megőrzött számított oszlopokon
Néha létrehozhat egy olyan számított oszlopot, amely determinisztikus, de pontatlan kifejezéssel van definiálva. Ezt akkor teheti meg, ha az oszlop meg van jelölve a PERSISTED vagy CREATE TABLE utasításban ALTER TABLE.
Ez azt jelenti, hogy az adatbázismotor tárolja a számított értékeket a táblában, és frissíti őket, amikor a számított oszloptól függő egyéb oszlopok frissülnek. Az adatbázismotor akkor használja ezeket a megőrzött értékeket, amikor indexet hoz létre az oszlopon, és amikor az indexre hivatkozik egy lekérdezés.
Ezzel a beállítással indexet hozhat létre egy számított oszlopon, ha az Adatbázismotor nem tudja pontosan bizonyítani, hogy a számított oszlopkifejezéseket visszaadó függvények, különösen a .NET-keretrendszerben létrehozott CLR-függvények determinisztikusak és pontosak-e.
Megjegyzés:
Számított oszlopon nem hozható létre szűrt index .