Domanda

[Utilizzo di SQL Server 2008 R2 Enterprise X64 SP1]

Sto cercando di utilizzare qualche forma di GETDATE() per passare la data di oggi in una stored procedure all'interno di OPENQUERY(), ma continuo a ricevere l'errore

.

Msg 8114, Livello 16, stato 1, Procedura SpCalcProjection, linea 0
Errore durante la conversione del tipo di dati Nvarchar in DateTime

Ecco il codice (SpCalcProjection prende un datetime):

SELECT top 1 multi FROM OPENQUERY([production], 'exec proddb.dbo.spCalcProjection "GETDATE()"')
.

Se utilizzo 2014-05-22 o qualsiasi Letterale al posto di GETDATE(), non ho alcun problema e ottenere il risultato corretto e previsto.Se utilizzo qualche altra funzionalità come CAST(GETDATE() AS DATE) o CONVERT(varchar, GETDATE(), 112), quindi ottengo di nuovo l'errore sopra.

È stato utile?

Soluzione 2

Hai una risposta da altrove che utilizzerò:

SELECT top 1 multi FROM OPENQUERY([production], 'DECLARE @dt datetime SELECT @dt = GETDATE() exec proddb.dbo.spCalcProjection @dt')
.

Questo evita di dover creare oggetti aggiuntivi nel DB.

Altri suggerimenti

Conrad, Pubblicazione Errore di sintassi originale per GetDate () senza doppie virgolette potrebbe aiutare più di quanto pensi.Inoltre non vedo perché dovresti sfuggire alla funzione qui.(Scusa, non è possibile aggiungere al filo con Lamak, non abbastanza reputazione per i commenti).Inoltre, perché hai bisogno di una query aperta per chiamare la tua SP?Quando si dice SQL Server 2008 R2, è sia sul lato chiamante che sul tuo server [Produzione]?Se l'altra estremità non è SQL Server potrebbe non avere una funzione GetDate ().Se l'altra estremità è SQL Server non è necessaria aperta.

[Aggiorna] Penso di avere la tua risposta.Non è possibile utilizzare una funzione come parametro per la procedura memorizzata.Non ha nulla a che fare con la query aperta.Cosa puoi fare, è possibile sostituire quella stored procedure con la funzione Votato da tabella.L'ho appena provato e ha funzionato.

Definizione:

CREATE FUNCTION TestFun
(
    @TestDateParam datetime
)
RETURNS 
@RetTable TABLE 
(
    Line nvarchar(20)
)
AS
BEGIN
    INSERT INTO @RetTable
    SELECT aString
        FROM sometable
        WHERE aDate = @TestDateParam

    RETURN 
END
.

Chiamata:

SELECT *
FROM dbname.dbo.TestFun(GETDATE())
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top