错误:列的类型" DOB"与UNPIVOT列表中指定的其他列的类型冲突

时间:2017-12-20 11:14:05

标签: sql-server-2008 tsql type-conversion unpivot

我的查询,

只需将行转换为列

SELECT
  ColumnName,
  value
FROM (SELECT
  id [ID],
  firstname [First Name],
  lastname [Last Name],
  dob [DOB],
  sex [Gender]
FROM client
WHERE id = '11') d
UNPIVOT
(
Value FOR
ColumnName IN ([ID], [First Name], [Last Name], [DOB], [Gender])
) unpiv;

但它显示错误。

  

列的类型" DOB"与UNPIVOT列表中指定的其他列的类型冲突。

1 个答案:

答案 0 :(得分:1)

结果将返回行中的所有列,构建包含所有值的新派生列,您必须确保这些类型适合在一起。

您可以将所有列包装在CAST

SELECT
  ColumnName,
  value
FROM (SELECT
  CAST(id AS NVARCHAR(MAX)) [ID],
  CAST(firstname AS NVARCHAR(MAX)) [First Name],
  CAST(lastname AS NVARCHAR(MAX)) [Last Name],
  CAST(dob AS NVARCHAR(MAX)) [DOB],
  CAST(sex AS NVARCHAR(MAX)) [Gender]
FROM client
WHERE id = '11') d
UNPIVOT
(
Value FOR
ColumnName IN ([ID], [First Name], [Last Name], [DOB], [Gender])
) unpiv;

DOB将转换为您机器的默认设置。使用CONVERT可以强制执行给定的日期/时间格式。