我正在尝试取消透视表列,但遇到从 varchar 到 int 的转换错误。我的表中的所有列都是整数,除了一列,即 varchar。错误详情如下。
将 varchar 值“View Test”转换为数据类型 int 时转换失败。
DECLARE @tableData AS TABLE (
TD_ID INT PRIMARY KEY IDENTITY(1,1)
, View0 INT
, View1 INT
, View2 INT
, Remarks Varchar(20)
)
INSERT INTO @tableData (View0, View1, View2, Remarks)
VALUES(1, 0, 1, 'View Test')
SELECT column_Name, column_value
FROM @tableData
CROSS APPLY (
VALUES
('View0',View0)
, ('View1',View1)
, ('View2',View2)
, ('Remarks',Remarks)
) Q (column_Name, column_value)
就像@Dale K所说,你可以先转换为varchar。这是示例代码:
DECLARE @tableData AS TABLE (
TD_ID INT PRIMARY KEY IDENTITY(1,1),
View0 INT,
View1 INT,
View2 INT,
Remarks Varchar(20)
)
INSERT INTO @tableData (View0, View1, View2, Remarks)
VALUES (1, 0, 1, 'View Test')
SELECT column_Name, column_value
FROM (
SELECT
CAST(View0 AS VARCHAR(20)) AS View0,
CAST(View1 AS VARCHAR(20)) AS View1,
CAST(View2 AS VARCHAR(20)) AS View2,
Remarks
FROM @tableData
) src
UNPIVOT (
column_value FOR column_Name IN (View0, View1, View2, Remarks)
) unpvt;
这是小提琴链接