T-SQL: возвращение VARCHAR в производном столбце - PullRequest
0 голосов
/ 20 октября 2010

У меня проблемы с возвратом VARCHAR из производного столбца.

Ниже приведены чрезвычайно упрощенные примеры кода.

Я мог сделать это раньше:

SELECT *, message =
CASE
WHEN (status = 0)
THEN 'aaa'
END
FROM products

Но когда я ввожу общее табличное выражение или производную таблицу:

WITH CTE_products AS (SELECT * from products)
SELECT *, message =
CASE WHEN (status = 0)
THEN 'aaa'
END
FROM CTE_products

это похоже на ошибку со следующим сообщением:

Conversion failed when converting the varchar value 'aaa' to data type int. 

Когда я настраиваю строку, чтобы сказать:

WITH CTE_products AS (SELECT * from products)
SELECT *, message =
CASE WHEN (status = 0)
THEN '123'
END
FROM CTE_products

Возвращается правильно.

...

Когда я удаляю все остальные пункты до него, он также прекрасно работает, возвращая «ааа».

Я бы предпочел оставить это как отдельный запрос.

Ответы [ 2 ]

1 голос
/ 20 октября 2010

Проблема в том, что столбец представляет собой целочисленный тип данных, и сервер sql пытается преобразовать 'aaa' в целое число

в одну сторону

WITH CTE_products AS (SELECT * from products)
SELECT *, message =
CASE WHEN (status = 0)
THEN 'aaa' else convert(varchar(50),status) 
END
FROM CTE_products
0 голосов
/ 20 октября 2010

Я фактически закончил тем, что нашел ответ.

В одном из моих предложений CASE / WHEN использовался производный столбец из CTE, и это привело к путанице.

До:

WITH CTE_products AS (SELECT *, qty_a + qty_b as qty_total FROM products)
SELECT *, message =
CASE WHEN (status = 0)
THEN 'Status is 0, the total is: ' + qty_total + '!'
END
FROM CTE_products

Исправлено:

WITH CTE_products AS (SELECT *, qty_a + qty_b as qty_total FROM products)
SELECT *, message =
CASE WHEN (status = 0)
THEN 'Status is 0, the total is: ' + CAST(qty_total AS VARCHAR) + '!'
END
FROM CTE_products

Я закончил тем, что сразу удалил предложения WHEN / THEN в операторе CASE, чтобы проверить, не было ли это скобокошибка, когда я понял, что при отсутствии какого-либо из предложений WHEN / THEN, включающих производный столбец из CTE, он мог вернуть VARCHAR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...