2009-04-02 13 views
7

Rozważmy następujący TSQL:TSQL - Wstawianie Daty w dynamiczne SQL

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

pojawia się błąd konwersji daty/ciąg. @InvoiceDate to zmienna datetime. Jaka jest prawidłowa składnia?

Odpowiedz

8

To może działać.

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

mimo że błąd zostanie zgłoszony, jeśli wartość jest zerowa.

+0

to nie działa, bo trzeba zamknięty datę (wewnątrz łańcucha) w cudzysłowie – eKek0

+0

Ok, dzięki, będę go naprawić –

+0

z "korekta zrobiła to, czego potrzebowałem. Dziękuję wszystkim – Jeff

1

... prawdopodobnie będziesz musiał dołączyć ciągi znaków w cudzysłowach.

Prawdopodobnie lepiej byłoby skonstruować ciąg daty w procedurze wywołującej, ponieważ należy tam sprawdzać wartości puste i możliwe inne sprawdzenia.

6

to będzie działać:

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

Chciałbym zaznaczyć dwie odpowiedzi zatwierdzone, ponieważ ta też działa. dziękuje – Jeff

+0

+1 za otrzymanie 100% prawa –

+0

Kiedy mam takie kłopoty, wybieram jedną i daję punkty (strzałka w górę) innym (jeśli mają więcej niż 1). To nie znaczy, że musisz zrobić to samo :) – eKek0

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