Delen via


'INSERT EXEC mislukt omdat de opgeslagen procedure het schema van de doeltabel heeft gewijzigd' in SQL Server 2016

Dit artikel helpt u bij het omzeilen van een probleem dat optreedt omdat een opgeslagen procedure in een database die de functie QueryGegevensarchief gebruikt, periodiek mislukt.

Oorspronkelijke productversie: SQL Server 2016
Oorspronkelijk KB-nummer: 4465511

Symptomen

Bekijk het volgende scenario:

  • U hebt een Microsoft SQL Server 2016-database die de functie Query Data Store gebruikt.

  • U hebt een opgeslagen procedure die een aanroep naar een andere opgeslagen procedure maakt met behulp van de INSERT...EXEC syntaxis.

  • De functie Query Data Store voert periodiek automatisch opschonen uit naarmate deze toeneemt tot de maximale geconfigureerde grootte. Daarnaast wordt de status querygegevensarchief gewijzigd van READ_WRITE in READ_ONLY.

In dit scenario mislukt de uitvoering van de bovenliggende opgeslagen procedure periodiek en ontvangt u een foutbericht dat er ongeveer als volgt uitziet:

Msg 556, Niveau 16, Staat 2, Lijnnummer
INSERT EXEC is mislukt omdat de opgeslagen procedure het schema van de doeltabel heeft gewijzigd.

Oorzaak

Het proces voor automatisch opschonen leegt het plan uit Query Data Store. De query ondervindt een bewerking voor opnieuw compileren omdat het plan ontbreekt in Query Data Store. Het plan is echter nog steeds aanwezig in de procedurecache. Wanneer de bewerking opnieuw wordt gecompileerd, genereert SQL Server standaard fout 556 om dubbele uitvoering van de onderliggende procedure te voorkomen. Een dergelijke dubbele bewerking zou ertoe leiden dat onjuiste resultaten worden geretourneerd.

Oplossing

Service Pack-informatie voor SQL Server 2016

Dit probleem is opgelost in het volgende servicepack voor SQL Server:

Service Pack 3 voor SQL Server 2016

Over servicepacks voor SQL Server:

Servicepacks zijn cumulatief. Elk nieuw servicepack bevat alle oplossingen die zich in de vorige servicepacks bevinden, samen met eventuele nieuwe oplossingen. U wordt aangeraden het meest recente servicepack en de meest recente cumulatieve update voor dat servicepack toe te passen. U hoeft geen eerder servicepack te installeren voordat u het nieuwste servicepack installeert. Raadpleeg tabel 1 in het volgende artikel voor meer informatie over het nieuwste servicepack en de meest recente cumulatieve update:

Het versie-, editie- en updateniveau van SQL Server en de bijbehorende onderdelen bepalen

Tijdelijke oplossing

Volg deze stappen om dit probleem te omzeilen:

  1. Vergroot de grootte van het querygegevensarchief. Dit vermindert de frequentie of waarschijnlijkheid van het querygegevensarchief, waardoor het plan wordt gewist en de READ_ONLY bedrijfsmodus wordt geactiveerd.

  2. Voeg foutafhandeling toe aan uw code om fout 556 te ondervangen en verzend de INSERT EXEC query vervolgens opnieuw.

  3. Wis de procedurecache wanneer Query Data Store terugkeert naar de READ_WRITE status van READ_ONLY.

Aanvullende informatie

Vanwege de wijzigingen die zijn aangebracht in Query Data Store in Microsoft SQL Server 2017, treedt dit probleem niet op in SQL Server 2017.