0

我有两个名为Entry_DataData的表

Entry_Data有三列:

EntryID DataID DataTypeID

1 50 18

2 49 59

30 28 16

数据有两列:

数据 ID

50 0x00000000033654

49 可拆卸

28 E:\Test.txt

Value 列是一个 nvarchar 字段。

我在尝试将以 0x 开头的所有值字段转换为 int 时编写了左连接,以便可以将十六进制值转换为有意义且人类可读的值,但是我收到错误:

将 nvarchar 值 '0x00000000033654' 转换为数据类型 int 时转换失败

SELECT TOP 100
  Entry_Data.DataTypeID AS DataTypeID,
  CAST(Data.Value AS nvarchar(440)) AS Value,
  Data.DataID AS DataID
FROM ActivityLog.Entry_Data
LEFT JOIN ActivityLog.Data
  ON ActivityLog.Entry_Data.DataID =
                                    CASE
                                      WHEN DataTypeID = 18 AND
                                        Value LIKE '%0x%' THEN CONVERT(nvarchar, CONVERT(int, Value, 1))
                                      ELSE DataTypeID
                                    END
WHERE DataTypeID = 18
4

1 回答 1

0

在您的情况下case expression,您正在返回nvarchar一种情况

 THEN CONVERT(nvarchar, CONVERT(int, Value, 1))

和第二种情况的整数

ELSE DataTypeID

您需要更正您的联接,以便它始终返回并 int 以使联接正常工作。

于 2017-10-10T08:34:14.967 回答