Tengo una consulta SQL en SQL Server 2005 que se está rompiendo cuando incluyo un orden condicional por. Cuando elimino el pedido por, la consulta funciona. Cuando escribo explícitamente el pedido por condición (por ejemplo, orden por p.Descripción), funciona. Cuando incluyo el orden condicionada por, me sale el error,Pedido condicional del servidor SQL Por
'Conversion failed when converting character string to smalldatetime data type'
SQL Server no se me muestran qué línea de código causó este error. Me pregunto cómo puedo solucionar esto para poder usar el orden condicional o solucionar cuál columna está fallando en la conversión.
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!
podrás n Es necesario usar 'CAST' –
Hacer declaraciones de mayúsculas independientes para evitar el tipo de datos de error de conversión –