【发布时间】:2015-11-03 14:49:18
【问题描述】:
我对 SQL 很陌生;我正在努力从数据库中提取数据。我正在尝试提取所有 Au 值 > 1.00 的记录。
AttributeValue 列是NVARCHAR
这是我尝试过的:
SELECT TOP 1000 [Id]
,[DHGeochemistryId]
,[AttributeColumn]
,[AttributeValue]
,[ModifiedDate]
,[ModifiedBy]
,[MRTDetailId]
FROM [DRILLHOLES_Export].[dbo].[DHGeochemistryAttr]
WHERE [AttributeValue] > 1.00 and [AttributeColumn] = 'Au'
软件抛出以下错误:
消息 8115,第 16 级,状态 8,第 2 行 将 nvarchar 转换为数字数据类型时出现算术溢出错误。
我尝试转换为数字:
SELECT TOP 1000 [Id]
,[DHGeochemistryId]
,[AttributeColumn]
,[AttributeValue]
,[ModifiedDate]
,[ModifiedBy]
,[MRTDetailId]
FROM [DRILLHOLES_Export].[dbo].[DHGeochemistryAttr]
SET myValue = CASE WHEN ISNUMERIC(AttributeValue)=1 THEN CAST(AttributeValue AS float)
ELSE 0 END)
WHERE [AttributeValue] > 1.00 and [AttributeColumn] = 'Au'
软件抛出以下错误:
消息 102,级别 15,状态 1,第 10 行 '=' 附近的语法不正确。 (第 10 行是“SET”命令)
我正在使用 SQL Server 2014,希望能得到一些帮助。
【问题讨论】:
-
你不能在
SELECT中做SET。 -
SET 语句不在 SELECT 语句中,而是一个单独的语句(我认为是无意的)。与 CASE... 组合会导致错误。解决该错误后,该错误将转到本身不是有效语句的 WHERE 语句。 CONVERT 或 CAST 应该可以进行比较,但可能需要检查数值是否为数字,具体取决于 AttributeValue 的可能值。
标签: sql sql-server sql-server-2014