t-sql: ошибка преобразования типа данных varchar в числовой в выражении then - PullRequest
5 голосов
/ 06 августа 2010

Я не могу понять ошибку, потому что я не пытаюсь преобразовать в числовую переменную @FQTROQ.

declare @FQTROQ varchar(30)
declare @FQNUTQ decimal(6,0)
set @FQTROQ = 'R-354'
set @FQNUTQ = 100

SELECT ( CASE WHEN (@FQTROQ is not null and @FQTROQ <> '')
THEN ( @FQTROQ )
ELSE ( @FQNUTQ ) END ) AS Numero_Troquel

Любая помощь? спасибо

Ответы [ 3 ]

4 голосов
/ 06 августа 2010
declare @FQTROQ varchar(30)
declare @FQNUTQ decimal(6,0)
set @FQTROQ = 'R-354'
set @FQNUTQ = 100

SELECT CASE WHEN (@FQTROQ is not null and @FQTROQ <> '')
THEN @FQTROQ
ELSE CAST(@FQNUTQ AS VARCHAR(30)) END AS Numero_Troquel

Вам необходимо привести DECIMAL как VARCHAR, чтобы выходные данные оператора CASE имели одинаковое выходное значение.

0 голосов
/ 06 августа 2010

Это потому, что у вас есть 2 переменные разных типов, и даже если вы пытаетесь вернуть ОДНО из этих значений как «Numero_Troquel», они должны быть совместимыми типами.Он пытается преобразовать переменную @FQTROQ в DECIMAL.

Вам нужно будет либо:

SELECT ( CASE WHEN (@FQTROQ is not null and @FQTROQ <> '')
THEN ( @FQTROQ )
ELSE ( CAST(@FQNUTQ AS VARCHAR(30)) ) END ) AS Numero_Troquel

ИЛИ ...

IF (@FQTROQ is not null and @FQTROQ <> '')
    SELECT @FQTROQ AS Numero_Troquel -- this will return as a VARCHAR
ELSE
    SELECT @FQNUTQ AS Numero_Troquel -- this will return as a DECIMAL
0 голосов
/ 06 августа 2010

Вам нужно сделать это:

SELECT ( CASE WHEN (@FQTROQ is not null and @FQTROQ <> '')
THEN ( @FQTROQ )
ELSE ( CAST(@FQNUTQ AS VARCHAR(30))) END ) AS Numero_Troquel

поскольку возвращаемое значение из столбца должно совпадать, SQL Server попытается преобразовать ваш VARCHAR в NUMERIC, а не наоборот, чего вы, вероятно, хотите.

Что за соглашение об именах, кстати?

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