2016-04-29 13 views
0

Ich habe eine gespeicherte Prozedur mit ich wie so nennen kann:EXEC Anruf funktioniert, aber Sp_executesql nicht

EXEC usp_GetDataExport '2016-06-01', 3, 302653, 2 

diese Daten zurückgibt als

jedoch erwartet, wenn aus einer Anwendung/SSIS-Paket namens dies, kann ich Aus dem Profiler wird er wie folgt interpretiert:

EXEC sp_executesql 
     N'EXECUTE usp_GetDataExport @P1, @P2, @P3, @P4' 
     , N'@P1 datetime2(1), @P2 varchar(2), @P3 varchar(3), @P4 varchar(4)' 
     , '2016-06-01' 
     , '3' 
     , '302653' 
     , '2' 

Dieser Aufruf gibt leere Daten zurück. Ich habe dies aus einem neuen Abfragefenster ausgeführt und es können auch keine Daten zurückgegeben werden. Ich bin mir nicht sicher, wie ich das weiter untersuchen soll. Könntest du bitte helfen? Dank

+2

'@ P3 varchar (3) =‚302653'' :) – Devart

Antwort

1

In Ihren exec die drei Spalten sind Zahlen, vermutlich ganze Zahlen:

exec sp_executesql N'EXECUTE usp_GetDataExport @P1, @P2, @P3, @P4', 
        N'@P1 datetime2(1), @P2 int, @P3 int, @P4 int', 
        '2016-06-01', 3, 302653 , 2 
+0

Vielen Dank. Das war's. Sollte –

+0

bekannt sein Aber anscheinend wird die sp_executesql-Anweisung vom Profiler mit Varchar-Datentyp-Parametern und nicht ganzen Zahlen 'gesehen'. Dies ist, wenn das SSIS-Paket ausgeführt wird. Wie denkst du, verhindere ich das? Der Datentyp der Parameter wird in der SSIS-Task als NUMERIC festgelegt und die SPROC akzeptiert auch den int-Datentyp. Danke –

+1

Das ist wirklich komisch. Sind Sie sicher, dass es nicht zwei verschiedene Versionen von usp_GetDataExport gibt, eine mit den Parametern 2 bis 4, die als int definiert sind und eine mit ihnen als varchar? Vielleicht in zwei verschiedenen Schemata? Oder zwei verschiedene Datenbanken? Oder die gleichnamige Datenbank auf zwei verschiedenen Servern? – SebTHU

Verwandte Themen