2009-04-02 11 views
7

Si consideri il seguente TSQL:TSQL - Inserimento di Date Into SQL dinamico

SET @WhereClause1 = 'where a.Date > ' + @InvoiceDate 

ottengo un errore di conversione data/string. @InvoiceDate è una variabile datetime. Qual è la sintassi corretta?

risposta

8

Questo potrebbe funzionare.

SET @WhereClause1 = 'where a.Date > ''' + convert(varchar, @InvoiceDate) + '''' 

anche se verrà generato un errore se il valore è nullo.

+0

questo non funziona perché si deve chiusa la data (all'interno della stringa) con virgolette – eKek0

+0

Ok, grazie, io risolvere il problema con l' –

+0

'' La correzione ha fatto ciò di cui avevo bisogno. grazie a tutti – Jeff

1

... e sarà probabilmente necessario racchiudere le stringhe di data tra virgolette.

Probabilmente sarebbe meglio costruire la stringa di data nella routine chiamante perché dovresti controllare lì per valori nulli e forse altre convalide.

6

Ciò funzionerà:

SET @WhereClause1 = 'where a.Date > ''' + cast(@InvoiceDate as varchar(100)) + '''' 
+0

vorrei poter contrassegnare due risposte approvate perché anche questo funziona. grazie – Jeff

+0

+1 per averlo capito al 100% –

+0

Quando ho questo problema, ne seleziono uno e do i punti (freccia in alto) agli altri (se sono più di 1). Ciò non significa che devi fare lo stesso :) – eKek0

1
EXEC sp_executesql N'SELECT * FROM Orders WHERE a.Date > @date', 
        N'@date datetime', 
        @date = @InvoiceDate