Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Bekanntes Problem?:Die gespeicherte Prozedur von SQL Server 2005 kann nicht mit einem Parameter abgeschlossen werden

Versuchen Sie, den Eingabeparameter zu maskieren.

Ich vermute, dass die Neukompilierung aufgrund der angegebenen Standardeinstellung (EDIT :Oder beim ersten Aufruf gesendeter Parameter) wird zur Kompilierzeit geschnüffelt. Neu kompilieren hat also keine Auswirkung.

Ich habe einen großen Unterschied zwischen den geschätzten Plänen festgestellt, indem ich einfach die Standardeinstellung von beispielsweise null auf NULL geändert oder keinen Plan habe.

ALTER PROCEDURE [usp_debug_mightwork]
    @DATA_DT_ID AS int = 20081130
AS
BEGIN
    DECLARE @IDATA_DT_ID AS int
    SET @IDATA_DT_ID = @DATA_DT_ID
    -- Stuff here that depends on IDATA_DT_ID
END

Ich finde diesen Artikel erklärt...

BEARBEITEN:

Neuer Link zu Abfrageplänen und Parametern . Es ist immer noch ein Parameter-Sniffing, ob ein Standardwert angegeben ist oder nicht.

Art verwandter Artikel über Konstanten und Pläne