MSG 8624: The query processor could not produce a query plan
Érdekes hibába futottunk bele már nem először: adott egy INSERT szkript, ami nagyon nem akar lefutni, az alábbi hibával örvendezteti meg a gazdáját:
Msg 8624, Level 16, State 1, Line 13
Internal Query Processor Error: The query processor could not produce a query plan. For more information, contact Customer Support Services.
Na ez az, amire az ember azt mondja, hogy könyörgöm, ez csak egy sima insert, mi ebben olyan nehéz? Úgy tűnik, hogy a probléma az idegen kulcsok és a persisted oszlopok környékén lehet, legalábbis erre utal az alábbi két Connect bug:
- Internal Query Processor Error: The query processor could not produce a query plan.
- Cannot insert into a table that with a foreign key to a table with a persisted computed column
A hiba évek óta ismert, de azért még mindig sikerül reprodukálni, tessék csak szavazni rá, hátha egyszer megjavítják.
Szerencsére van workaround (én nem hívnám megoldásnak, de működik):
SET ANSI_NULLS ON SET ANSI_PADDING ON SET ANSI_WARNINGS ON SET CONCAT_NULL_YIELDS_NULL ON SET NUMERIC_ROUNDABORT OFF SET QUOTED_IDENTIFIER ON SET ARITHABORT ON
Az utolsó csak akkor kell, ha az adatbázis 80-as kompatibilitási módban van.
Remélem sikerült ezzel megkímélni másokat is pár órányi debuggolástól.
MSDN Kompetencia Központ
Én nem tudo mióta, de nálam ez az alap:
– A kiemelten fontosak
ALTER DATABASE [$(D2_ceg_dbname)] SET AUTO_CLOSE ON
ALTER DATABASE [$(D2_ceg_dbname)] SET RECOVERY FULL
ALTER DATABASE [$(D2_ceg_dbname)] SET READ_WRITE
ALTER DATABASE [$(D2_ceg_dbname)] SET MULTI_USER
– Required SET Options for Filtered Indexes
ALTER DATABASE [$(D2_ceg_dbname)] SET ANSI_NULLS ON
ALTER DATABASE [$(D2_ceg_dbname)] SET ANSI_PADDING ON
ALTER DATABASE [$(D2_ceg_dbname)] SET ANSI_WARNINGS ON
ALTER DATABASE [$(D2_ceg_dbname)] SET ARITHABORT ON
ALTER DATABASE [$(D2_ceg_dbname)] SET CONCAT_NULL_YIELDS_NULL ON
ALTER DATABASE [$(D2_ceg_dbname)] SET NUMERIC_ROUNDABORT OFF
ALTER DATABASE [$(D2_ceg_dbname)] SET QUOTED_IDENTIFIER ON
– A továbbiak névsorrendben
ALTER DATABASE [$(D2_ceg_dbname)] SET ANSI_NULL_DEFAULT OFF
ALTER DATABASE [$(D2_ceg_dbname)] SET AUTO_CREATE_STATISTICS ON
ALTER DATABASE [$(D2_ceg_dbname)] SET AUTO_UPDATE_STATISTICS ON
ALTER DATABASE [$(D2_ceg_dbname)] SET CURSOR_CLOSE_ON_COMMIT OFF
ALTER DATABASE [$(D2_ceg_dbname)] SET CURSOR_DEFAULT LOCAL
ALTER DATABASE [$(D2_ceg_dbname)] SET RECURSIVE_TRIGGERS OFF
ALTER DATABASE [$(D2_ceg_dbname)] SET PAGE_VERIFY TORN_PAGE_DETECTION
–Dátumformátumot nem tudjuk adatbázisszinten beállítani, ezt a szkriptek elején kiadhatjuk:
set dateformat ymd