Tôi có truy vấn SQL trong SQL Server 2005 đang bị ngắt khi tôi bao gồm thứ tự điều kiện theo. Khi tôi xóa lệnh, truy vấn sẽ hoạt động. Khi tôi viết rõ ràng thứ tự theo điều kiện (ví dụ: order by p.Description) nó hoạt động. Khi tôi bao gồm thứ tự có điều kiện, tôi nhận được lỗi,Thứ tự điều kiện máy chủ SQL theo số
'Conversion failed when converting character string to smalldatetime data type'
Máy chủ SQL không hiển thị cho tôi dòng mã nào gây ra lỗi này. Tôi tự hỏi làm thế nào tôi có thể sửa lỗi này vì vậy tôi có thể sử dụng thứ tự có điều kiện hoặc khắc phục sự cố cột nào không thành công trong chuyển đổi.
declare @SearchTerm nvarchar(255)
declare @SortBy nvarchar(255)
declare @Months int
declare @VendorID int
declare @ProductID int
set @SearchTerm = 'focus'
set @SortBy = 'product'
set @Months = 3
set @VendorID = null
set @ProductID = null
-- This makes it so the @Month will filter by n number of months ago.
declare @PreviousMonths datetime
if @Months is null
begin
set @PreviousMonths = 24
end
else
begin
set @PreviousMonths = DateAdd(month, [email protected], GetDate())
end
select
a.dsAlertID as AlertID,
a.ProductID,
v.VendorID,
p.Description as ProductName,
v.LongName as VendorName,
a.Introduction,
a.Writeup,
a.DateAdded
from
ev_ds_Alerts a
left outer join
tblProducts p on a.ProductID = p.ProductID
left outer join
tblVendors v on v.VendorID = p.VendorID
where
(@SearchTerm is null or (a.Writeup like '% ' + @SearchTerm + '%' or a.Introduction like '% ' + @SearchTerm + '%'))
and ((@Months is null) or (@Months is not null and a.DateAdded >= @PreviousMonths))
and ((@VendorID is null) or (@VendorID is not null and v.VendorID = @VendorID))
and ((@ProductID is null) or (@ProductID is not null and p.ProductID = @ProductID))
order by
case @SortBy
when 'product' then p.Description
when 'vendor' then v.LongName
else a.DateAdded
end
-- order by p.Description or v.LongName works when explicitly writing them out!
Bạn sẽ không eed để sử dụng 'CAST' –
Tạo báo cáo trường hợp độc lập để tránh lỗi truyền dữ liệu kiểu –