powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Неявное преобразование в integer в динамически (case when @par=.. ) определяемой колонке
7 сообщений из 7, страница 1 из 1
Неявное преобразование в integer в динамически (case when @par=.. ) определяемой колонке
    #39600432
McCar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все привет.
MS SQL 2014
В рамках некой задачи, где нужна сортировка по заданному пользователем атрибуту, столкнулся с такой проблемой.
Можно продемонстрировать на таком запросе:
Код: sql
1.
2.
3.
4.
5.
6.
declare @sortColum int=1;
with x
as (Select 'textColumn' as textCol, 1 as intCol),
xx as (select x.IntCol, x.TextCol, case  @sortColum when 2 then x.intCol else x.textCol end as SortAttribute  from x)
select * from xx 
--order by x.SortAttribute


С @sortColum=2 (интовое поле) - все нормально, с 1 - валится с
Conversion failed when converting the varchar value 'textColumn' to data type int
То есть логика такая - если при определенных условиямх поле может быть int, значит оно будет всегда int.
Ладно, допустим, не может он определить тип поля "на лету", но почему int, а не текст?
И как это обойти, кроме Dynamic SQL?
...
Рейтинг: 0 / 0
Неявное преобразование в integer в динамически (case when @par=.. ) определяемой колонке
    #39600438
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
McCar, явным кастом к нужному типу.
...
Рейтинг: 0 / 0
Неявное преобразование в integer в динамически (case when @par=.. ) определяемой колонке
    #39600449
McCar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser,
Да понятно что можно к тексту скастовать, если бы речь шла просто о отображании на UI, но тут речь идет про сортировку, - мне не надо чтобы число сортировалось как текст
...
Рейтинг: 0 / 0
Неявное преобразование в integer в динамически (case when @par=.. ) определяемой колонке
    #39600455
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
McCar,

Код: sql
1.
order by case @sortColum when 2 then x.intCol else null end, case @sortColum when 2 then null else x.textCol end
...
Рейтинг: 0 / 0
Неявное преобразование в integer в динамически (case when @par=.. ) определяемой колонке
    #39600499
McCar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что интересно, для если речь идет только о стринговых полях или только о числовых, оно вполне себе может определять тип колонки в result-set-е "на лету".
Код: sql
1.
2.
3.
4.
5.
declare @sortColum int=2;
with x
as (Select cast(1 as int) as intcol,  cast(2.3 as decimal(2,1)) as  numericCol),
xx as (select x.intcol, x.numericCol, case  @sortColum when 1 then x.intcol else x.numericCol end as SortAttribute  from x)
select xx.* from xx 


Пришлось разбить колонки на две группы, - числовые и строковые, и для каждого делать отдельный order by.

По мне все это как то странно, и больше похоже на багу чем фичу.
...
Рейтинг: 0 / 0
Неявное преобразование в integer в динамически (case when @par=.. ) определяемой колонке
    #39600504
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
McCar,

почитали бы доку сначала: Приоритет типов данных
...
Рейтинг: 0 / 0
Неявное преобразование в integer в динамически (case when @par=.. ) определяемой колонке
    #39600509
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapMcCar,

почитали бы доку сначала: Приоритет типов данных Выражение CASE Возвращает выражение с наивысшим приоритетом из набора выражений
result_expressions и необязательного выражения else_result_expression https://msdn.microsoft.com/ru-ru/library/ms181765(v=sql.110).aspx
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Неявное преобразование в integer в динамически (case when @par=.. ) определяемой колонке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]