Синтаксическая ошибка при использовании преобразования внутри поворота


Мне нужно преобразовать мои значения в Varchar. У меня есть такой код:

SELECT Value AS FieldName, [42] AS [KeyID_42],[600] AS [KeyID_600]
FROM
(
  SELECT TransID, Value, FieldName
  FROM 
  (
      SELECT TransID, [ErisaPlanEndsMM], [ErisaPlanEndsDD],
           [MLRAvgLivesNumber], [MLRAvgLivesRptYear]
      FROM tblSQLAdminInventory
  ) p
  UNPIVOT
   (FieldName FOR Value IN 
      (Convert(VarChar(250), [ErisaPlanEndsMM]) AS [ErisaPlanEndsMM],
       Convert(VarChar(250), [ErisaPlanEndsDD]) AS [ErisaPlanEndsDD],
       Convert(VarChar(250), [MLRAvgLivesNumber]) AS [MLRAvgLivesNumber],
       Convert(VarChar(250), [MLRAvgLivesRptYear]) AS [MLRAvgLivesRptYear])
   )AS unpvt
) AS SourceTable
PIVOT
(
MAX(FieldName)
FOR TransID IN ([42],[600])
) AS PivotTable

Я получаю ошибку:

Msg 156, Level 15, State 1, Line 9
Incorrect syntax near the keyword 'Convert'.

Все, что я нашел в интернете, - это случаи, когда CAST использовался, потому что пользователю нужно было преобразовать в Int. В моем случае мне нужно все, Варчар. Может ли кто-нибудь подсказать мне, как это сделать?

Я должен добавить, что это динамический запрос и может содержать несколько десятков полей, в зависимости от таблицы. Мой код выше-это SQL, генерируемый при запуске против одного специфическая таблица.
1 2

1 ответ:

Проблема в том, что вы пытаетесь преобразовать внутри вашего unpivot, это неверный синтаксис. Данные должны быть преобразованы до попытки unpivot.

Вы можете исправить это, поместив преобразование в свой подзапрос:

SELECT TransID, Value, FieldName
FROM 
(
    SELECT TransID, 
       Convert(VarChar(250), [ErisaPlanEndsMM]) AS [ErisaPlanEndsMM], 
       Convert(VarChar(250), [ErisaPlanEndsDD]) AS [ErisaPlanEndsDD],
       Convert(VarChar(250), [MLRAvgLivesNumber]) AS [MLRAvgLivesNumber], 
       Convert(VarChar(250), [MLRAvgLivesRptYear]) AS [MLRAvgLivesRptYear]
    FROM tblSQLAdminInventory
) p
UNPIVOT
(
    FieldName FOR Value IN 
      ([ErisaPlanEndsMM], [ErisaPlanEndsDD], [MLRAvgLivesNumber], [MLRAvgLivesRptYear])
)AS unpvt