Korriger: SQLServer kan krasje når en forespørsel om kjøring av en ekstern lagret prosedyre inneholder ufullstendig definisjon av argumenter

VIKTIG: Denne artikkelen ble oversatt med maskinoversettelsesprogramvare fra Microsoft og muligens redigert av Microsoft Community via CTF-teknologi i stedet for av en oversetter. Microsoft tilbyr både menneskelig oversatte og maskinoversatte/Community-redigerte artikler, slik at du får tilgang til alle artiklene i vår Knowledge Base på ditt eget språk. En maskinoversatt eller Community-redigert artikkel er imidlertid ikke alltid perfekt. Den kan inneholde feil i vokabular, syntaks eller grammatikk, mye likt en fremmedspråklig som forsøker å snakke språket ditt. Microsoft har ikke ansvar for unøyaktige opplysninger, feil eller skade forårsaket av feilaktig oversettelse av innholdet eller kundenes bruk av informasjonen. Microsoft oppdaterer jevnlig maskinoversettelsesprogramvaren og -verktøyene for å forbedre redigering av maskinoversatte tekster.

Den engelske versjonen av denne artikkelen er den følgende: 3135750
Symptom
På en ekstern server som kjører Microsoft SQL Server 2012 eller SQL Server-2014 har du en lagret prosedyre som har et argument for utdata som ligner på følgende:

create procedure procExample @retVal varchar(10) outputas set @retVal = 'Goodbye';
Vanligvis ligner syntaksen for å starte en ekstern prosedyre på følgende:

-- Declare a variable to hold a result, and have it initialized with a non-NULL valuedeclare @outputResult varchar(10) = 'Hello';execute ('MyDb.dbo.procExample ? OUTPUT', @outputResult OUTPUT) at [MyRemoteServer];print @outputResult;
Hvis du utelater det "? UTDATA"en del av syntaksen for kall, krasje den lokale serveren som kjører SQL Server. Den eksterne serveren fortsetter å fungere fordi kjøring når den aldri på grunn av denne syntaksen utelatelse. Hvis du for eksempel ligner syntaksen på følgende:

-- Declare a variable to hold a result, and have it initialized with a non-NULL valuedeclare @outputResult varchar(10) = 'Hello';execute ('MyDb.dbo.procExample', @outputResult OUTPUT) at [MyRemoteServer];
En variabel som ikke er initialisert, fører ikke til den lokale serveren til å krasje. Det imidlertid generere en feilmelding som sier at ikke alle argumenter er angitt for samtalen (som de skal være). Hvis du for eksempel har du følgende syntaks:

-- Declare a variable to hold a result, and initialize it with NULL, or leave uninitializeddeclare @outputResult varchar(10) = NULL;execute ('MyDb.dbo.procExample', @outputResult OUTPUT) at [MyRemoteServer];
I dette tilfellet kan du få en feilmelding som ligner på følgende:

Msg 201, nivå 16, 4 tilstand, prosedyren procExample, linje 10

Prosedyren eller funksjonen 'procExample' forventer at parameteren '@retVal', som ikke er levert.
Løsning

Oppdateringsinformasjon

Dette problemet ble først løst i den følgende kumulative oppdateringen for SQL Server:
Anbefaling: Installere den nyeste kumulative oppdateringen for SQL Server

Hver nye kumulative oppdateringen for SQL Server inneholder alle hurtigreparasjonene og alle sikkerhetsreparasjoner som er inkludert i den forrige kumulative oppdateringen. Sjekk ut de nyeste kumulative oppdateringene for SQL Server:

Obs! Du kan finne informasjon om siste SQL-serveren bygger fra Hvor du finner informasjon om siste SQL-serveren bygger.
Status
Microsoft har bekreftet at dette er et problem i Microsoft-produktene som er oppført i delen "Gjelder for".
Referanser
Lær mer om den terminologi som Microsoft bruker for å beskrive programvareoppdateringer.

Advarsel: Denne artikkelen er autooversatt

Egenskaper

Artikkel-ID: 3135750 – Forrige gjennomgang: 05/31/2016 11:57:00 – Revisjon: 3.0

Microsoft SQL Server 2012 Service Pack 2, Microsoft SQL Server 2014 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard

  • kbqfe kbfix kbexpertiseinter kbsurveynew kbmt KB3135750 KbMtno
Tilbakemelding