У меня следующий запросSQL упорядочить по переменной с различным типом данных
DECLARE @OrderBy INT
SET @OrderBy = 1
DECLARE @PageSize INT
SET @PageSize = 10
DECLARE @PageIndex INT
SET @PageIndex = 1
SELECT exp.ExportId
,exp.ExportDate
,exp.UniqueExportId
,exp.ExporterOfRecord
,exp.PartNo
,exp.Description
,exp.AvailQty AS Quantity
,exp.UnitOfMeasuremnt
,exp.Destination
--,exp.ScheduledB,
,tp.HTSUS AS ScheduledB
FROM tblCASIDD_Export exp
LEFT JOIN tblCASIDD_Part tp
ON tp.PartNo = exp.PartNo
ORDER BY (
CASE @OrderBy
WHEN 1
THEN exp.PartNo
WHEN 2
THEN exp.ExportDate
END
) OFFSET @PageSize * (@PageIndex - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY
, когда я дать OrderBy 1 (VARCHAR) он выдает ошибку
Конверсия удалось при преобразовании даты и/или времени из строки символов ,
Его ошибка метание с типом данных, кроме типа даты
, а с даты ввода его рабочий
любое предложение, что я делаю неправильно
Благодаря
С литым я сделал, но почему его ошибка бросания в разных типах данных –
Не могли бы вы дать точные типы 'PartNo' и' ExportDate'? – StuartLC
@ Md.ParvezAlam - потому что выражения 'CASE' являются общей формой выражения - здесь случай * необычный *, что все строки возвращают значения из * того же предложения' 'THEN'. Таким образом, код должен быть сгенерирован для ожидания сочетания значений из любого из предложений «THEN» (или предложения «ELSE»). И поэтому SQL должен решить, какой тип данных предназначен для всего выражения CASE, он принимает все возможные типы данных из каждого предложения, а затем использует правила приоритета для определения одного типа данных, в котором будут указаны все значения клаузинга конвертировано в. В вашем случае он выбрал 'datetime'. –