Where子句中的CAST错误

时间:2012-06-26 17:29:03

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

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

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

它似乎是where子句,如果我把它取出它似乎工作。所以我添加了一个转换为where子句,没有运气。在where子句中我需要做些什么特别的事情才能让它工作吗?只是一个FYI,这是一个从网址中提取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'

抱歉缺少信息。

1 个答案:

答案 0 :(得分:2)

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

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

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

  

Msg 8169,Level 16,State 2,Line 1
当转换失败   从字符串转换为uniqueidentifier。

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