【问题标题】:CAST error in a Where ClauseWhere 子句中的 CAST 错误
【发布时间】:2012-06-26 17:29:02
【问题描述】:

在下面的查询中,我不断收到此错误:

Cannot read the next data row for the dataset DataSetProject. (rsErrorReadingNextDataRow)

这似乎是 where 子句,如果我把它拿出来似乎可以工作。所以我在 where 子句中添加了一个演员,但没有运气。在 where 子句中我需要做一些特别的事情来让它工作吗?仅供参考,这是在从 url 中提取 id 的报告中。

SELECT new_projects.new_projectsId AS ProjectId
     , new_projects.new_name AS ProjectName
     , new_projects.new_Description AS ProjectDescription

FROM
    new_projects
    LEFT OUTER JOIN new_projectsteps
        ON new_projects.new_projectsId = new_projectsteps.new_ProjectSteps2Id
    LEFT OUTER JOIN Task
        ON new_projectsteps.new_projectstepsId = Task.RegardingObjectId
WHERE
(new_projects.new_projectsId = cast(@id AS UNIQUEIDENTIFIER))

谢谢!

编辑:

SQL 中的 id 是唯一标识符,@id 的值是从查询字符串(url)中提取的。所以它看起来像:&id='BC02ABC0-A6A9-E111-BCAD-32B731EEDD84'

抱歉,缺少信息。

【问题讨论】:

  • 如果没有演员表也能工作,你为什么要演员表? @id 的值是多少?
  • 没有演员表就不行。它可以在没有 while where 语句的情况下工作
  • 我们不知道 new_projectsId 是什么(什么类型),我们也不知道您作为 @id 传递的内容 - 我们应该如何知道如何告诉您修复它? We're not mind readers;如果您希望我们为您提供帮助,请向我们提供相关信息。
  • 所以显示@id 的声明以及如何填充它。

标签: sql-server sql-server-2008 tsql reporting-services ssrs-2008


【解决方案1】:

我怀疑单引号正在通过。因此,要么在传递给您的参数之前将它们剥离,要么使用:

WHERE new_projects.new_projectsId = CONVERT(UNIQUEIDENTIFIER, REPLACE(@id, '''', ''));

如果您在 GUID 包含其他字符时尝试直接比较,您应该得到:

消息 8169,级别 16,状态 2,第 1 行
转换失败时 从字符串转换为唯一标识符。

如果这不是正在发生的事情,那么不要说“SQL 中的 id 是唯一标识符” - 显示所有代码,以便我们可以尝试重现问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 2022-01-17
    相关资源
    最近更新 更多