【发布时间】:2017-06-19 16:09:47
【问题描述】:
我创建了一个名为 vReceivedEmail 的视图,其中包含一个名为 RowPrimaryKeyValue 的 varchar 列。此列通常存储主键 id 值,例如 567781,但不时有描述性文本“Ad hoc message”。
我已将视图设置为仅显示包含主键值的记录,然后将 CAST 列显示为 int。
SELECT CAST(Email.RowPrimaryKeyValue as int) as DetailID
FROM MessageStore.dbo.Email Email
WHERE ISNUMERIC(Email.RowPrimaryKeyValue) = 1
当我测试视图时,我只得到具有我期望的主键值的记录,当我在对象资源管理器中查看视图的列列表时,该列保存为int 数据类型。
然后我尝试在单独的查询中应用以下 WHERE 子句,引用我保存的视图:
SELECT PotAcc.DetailID
FROM PotentialAccounts PotAcc
WHERE PotAcc.DetailID NOT IN (
SELECT RecEmail.DetailID
FROM vReceivedEmail RecEmail
)
...但我返回以下错误:
转换 varchar 值 'Ad hoc message' 时转换失败 数据类型为 int。
'Ad hoc message' 是来自我过滤并转换为 int 的列中的数据,但我不知道它是如何解决这个问题的,因为视图会明确地将其过滤掉并将列转换为 int。
【问题讨论】:
标签: tsql sql-server-2012 ssms-2012