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ì?
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ì?
Đ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.
Vì truy vấn soạn thư của bạn dưới dạng chuỗi đầu tiên, sau đó tôi nghĩ bạn cần chuyển đổi @InvoiceDate thành chuỗi có dạng như this. http://www.databasejournal.com/features/mssql/article.php/10894_2197931_1/Working-with-SQL-Server-DateTime-Variables-Part-Two---Displaying-Dates-and-Times-in-Different-Formats.htm
... 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.
này sẽ làm việc:
SET @WhereClause1 = 'where a.Date > ''' + cast(@InvoiceDate as varchar(100)) + ''''
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
+1 để nhận được 100% ngay –
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
EXEC sp_executesql N'SELECT * FROM Orders WHERE a.Date > @date',
N'@date datetime',
@date = @InvoiceDate
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
Ok, cảm ơn, tôi sẽ sửa chữa nó –
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