2016-05-09 6 views
1

Я пытаюсь иметь инструкцию SELECT из столбца tinyint и декодировать его.SQL Server CAST a CASE на

Пример:

  1. SimpleText
  2. MoreText
  3. AnotherText

Я прочитал в других постах, которые вы используете CAST/CONVERT заявление, но я получаю ту же ошибку, что он не может преобразовать 'MoreText' в int.

Мое заявление следующая

SELECT [ID] 
     ,[OneColumn] 
     ,[UselessColumn] 
     ,CAST (CASE 
      WHEN [ImportantColumn] = 1 THEN 'SimpleText' 
      WHEN [ImportantColumn] = 2 THEN 'MoreText' 
      WHEN [ImportantColumn] = 3 THEN 'AnotherText' 
     ELSE 'NoText' END AS nvarchar(20)) AS [ProblemColumn] 
     ,[ColumnNotImportant] 
FROM [sof].[ExampleTable] 

Я также попытался

SELECT [ID] 
     ,[OneColumn] 
     ,[UselessColumn] 
     ,CASE 
      WHEN [ImportantColumn] = 1 THEN CAST('SimpleText' AS nvarchar(20)) 
      WHEN [ImportantColumn] = 2 THEN CAST('MoreText' AS nvarchar(20)) 
      WHEN [ImportantColumn] = 3 THEN CAST('AnotherText' AS nvarchar(20)) 
     ELSE 'NoText' END AS [ProblemColumn] 
     ,[ColumnNotImportant] 
FROM [sof].[ExampleTable] 
+0

Вы уверены, что вышеуказанные запросы вызвали ошибку –

+0

я имею в виду, что все, что вы делаете с результатом этого запроса проблемы. Ошибка, возникающая из SQL или из кода? Вероятно, вы сгенерировали объект DTO с исходным типом важного столбца (int) и не изменили его, когда вы изменили то, что возвращалось. –

ответ

0

Для чего вам нужен актерский состав?

SELECT [ID] 
     ,[OneColumn] 
     ,[UselessColumn] 
     ,CASE WHEN [ImportantColumn] = 1 THEN 'SimpleText' 
       WHEN [ImportantColumn] = 2 THEN 'MoreText' 
       WHEN [ImportantColumn] = 3 THEN 'AnotherText' 
       ELSE 'NoText' 
     END AS [ProblemColumn] 
     ,[ColumnNotImportant] 
FROM [sof].[ExampleTable] 
+0

Он сказал, что он получает ошибку, * не может преобразовать 'MoreText' в int. * –

+0

@Prdp: Да, но поскольку в этом запросе нет никакого «int», я сомневаюсь, что он показал соответствующую часть или упростил ее. Вот почему мое предложение состояло в том, чтобы удалить избыточный «CAST». Это должно либо работать, либо показывать более значимую ошибку. –

+0

Hi @Tim, Без приведения я получаю ту же ошибку, фактически на попрошайничестве я использовал ничего, кроме CASE, после ошибки я начал искать ответы здесь, и они приходят с решением CAST/CONVERT, и ни одна из этих работ , –

0

Пусть SQL сделать работу для вас. Создайте таблицу с важными значениями Столбец как один столбец и текст, который вы хотите отобразить в качестве второго столбца. Затем измените свой запрос, чтобы присоединиться к этой таблице.

Ключ к таблице поиска - значения важного столбца.

+0

Привет, @ n8wrl, ну это мой последний ресурс, но это подводит мне еще несколько вопросов, один из них: будет ли занято больше времени на обработку запроса? –

+0

@ XavierLace: Сомнительно, но лучше всего его измерить. Это решение имеет много преимуществ - вы можете использовать его в других местах без дублирующего кода, и ваша логика теперь более управляема данными, что хорошо. – n8wrl