Sql server Where子句中的强制转换错误
在下面的查询中,我不断遇到此错误:Sql server Where子句中的强制转换错误,sql-server,sql-server-2008,tsql,reporting-services,ssrs-2008,Sql Server,Sql Server 2008,Tsql,Reporting Services,Ssrs 2008,在下面的查询中,我不断遇到此错误: Cannot read the next data row for the dataset DataSetProject. (rsErrorReadingNextDataRow) 这似乎是where子句,如果我去掉它,它似乎起作用了。因此,我在where子句中添加了一个cast,但运气不佳。我需要在where子句中做一些特殊的事情来让它工作吗?仅供参考,这是一个从url中提取id的报告 SELECT new_projects.new_projectsId A
Cannot read the next data row for the dataset DataSetProject. (rsErrorReadingNextDataRow)
这似乎是where子句,如果我去掉它,它似乎起作用了。因此,我在where子句中添加了一个cast,但运气不佳。我需要在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的值是从querystring(url)中提取的。所以它看起来像:&id='BC02ABC0-A6A9-E111-BCAD-32B731EEDD84'
很抱歉丢失了信息。我怀疑单引号正在通过。因此,要么在传递给参数之前将它们剥离出来,要么使用:
WHERE new_projects.new_projectsId = CONVERT(UNIQUEIDENTIFIER, REPLACE(@id, '''', ''));
如果在GUID包含其他字符时尝试直接比较,则应获得:
Msg 8169,16级,状态2,第1行转换失败 从字符串转换为唯一标识符
如果不是这样,那么不要说“SQL中的id是唯一标识符”-显示所有代码,以便我们可以尝试重现问题。如果没有强制转换,为什么要强制转换?
@id
的值是多少?如果没有演员阵容,它将无法工作。它在没有while-where语句的情况下工作。我们不知道new\u projectsId是什么(什么类型),也不知道您作为@id
传递的是什么-我们怎么知道如何告诉您修复它;如果您希望我们为您提供帮助,请提供相关信息。因此,请显示@id
的声明以及如何填充该声明。