2009-04-02 29 views
7

Xem xét TSQL sau:TSQL - Chèn Ngày Into động SQL

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

tôi nhận được một lỗi chuyển đổi ngày/chuỗi. @InvoiceDate là biến datetime. Cú pháp đúng là gì?

Trả lời

8

Điều này có thể hiệu quả.

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

mặc dù lỗi sẽ được tăng lên nếu giá trị rỗng.

+0

này không làm việc bởi vì bạn phải kèm ngày (bên trong chuỗi) với dấu ngoặc kép – eKek0

+0

Ok, cảm ơn, tôi sẽ sửa chữa nó –

+0

với '' chỉnh sửa điều này đã làm những gì tôi cần. cảm ơn tất cả – Jeff

1

... và có thể bạn sẽ cần phải kèm theo chuỗi ngày trong dấu ngoặc kép.

Nó thực sự có thể tốt hơn để xây dựng chuỗi ngày trong thói quen gọi điện vì bạn nên kiểm tra ở đó cho các giá trị null và có thể xác thực khác.

6

này sẽ làm việc:

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

tôi muốn tôi có thể đánh dấu hai câu trả lời được phê duyệt bởi vì điều này cũng hoạt động. cảm ơn – Jeff

+0

+1 để nhận được 100% ngay –

+0

Khi tôi gặp sự cố đó, tôi chọn một điểm và đặt điểm (mũi tên lên) cho những người khác (nếu chúng lớn hơn 1). Điều đó không có nghĩa là bạn phải làm như vậy :) – eKek0

1
EXEC sp_executesql N'SELECT * FROM Orders WHERE a.Date > @date', 
        N'@date datetime', 
        @date = @InvoiceDate 
Các vấn đề liên quan