SQL查询时出现“将字符串转换为 uniqueidentifier 时失败”。

mc920879227 2012-08-13 09:40:39
select a.CustomerName,a.boy,b.girl from
(select c.CustomerName,count(*) as boy from tb_masEmPersonalInfo a
left join tb_masEmployeeEmployer b on a.EmPersonalInfoID=b.EmPersonalInfoID
left join tb_masCustomer c on b.CustomerID=c.CustomerID
where a.Disabled=0
and b.EwStatus in ('A','N')
and a.GenderID=1
and c.CustomerID='@c.CustomerID'
group by c.CustomerName) a
left join
(select c.CustomerName,count(*) as girl from tb_masEmPersonalInfo a
left join tb_masEmployeeEmployer b on a.EmPersonalInfoID=b.EmPersonalInfoID
left join tb_masCustomer c on b.CustomerID=c.CustomerID
where a.Disabled=0
and b.EwStatus in ('A','N')
and a.GenderID=2
and c.CustomerID='@c.CustomerID'
group by c.CustomerName) b on a.CustomerName=b.CustomerName

union

select '总计' as CustomerName,a.boy as 男,b.girl as 女 from
(select count(*) as boy from tb_masEmPersonalInfo a
left join tb_masEmployeeEmployer b on a.EmPersonalInfoID=b.EmPersonalInfoID
left join tb_masCustomer c on b.CustomerID=c.CustomerID
where a.Disabled=0
and b.EwStatus in ('A','N')
and a.GenderID=1
and c.CustomerID='@c.CustomerID') a
left join
(select count(*) as girl from tb_masEmPersonalInfo a
left join tb_masEmployeeEmployer b on a.EmPersonalInfoID=b.EmPersonalInfoID
left join tb_masCustomer c on b.CustomerID=c.CustomerID
where a.Disabled=0
and b.EwStatus in ('A','N')
and a.GenderID=2
and c.CustomerID='@c.CustomerID') b on 1=1


将字符串转换为 uniqueidentifier 时失败。
...全文
25427 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tr00616 2014-09-12
  • 打赏
  • 举报
回复
引用 5 楼 iamaitman 的回复:
declare @CustomerID varchar(50)
set @CustomerID='990CC7DF-FE11-40C0-8ECC-6546E2A28119'
select convert(uniqueidentifier,@CustomerID)
威武,解决了GUID传值的问题,外部用字符串,SQL内部转换就可以了!
qunser 2013-08-23
  • 打赏
  • 举报
回复
and c.CustomerID='@c.CustomerID' 去掉单引号 and c.CustomerID=@c.CustomerID 即可
mc920879227 2012-08-13
  • 打赏
  • 举报
回复
大侠们。。。帮帮忙啦
mc920879227 2012-08-13
  • 打赏
  • 举报
回复
就说该怎么解决吧,详细点。。。一上午还没弄一张报表
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
c.CustomerID是uniqueidentifier类型的...
[/Quote]
既然这样,为什么在and c.CustomerID='@c.CustomerID'这里用'@c.CustomerID'呢?
如果是变量的话,不能加单引号吧。
而且@c.CustomerID这种变量名也是不合法的,不能有.
叶子 2012-08-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

c.CustomerID是uniqueidentifier类型的...
[/Quote]
但是你用单引号把它引起来,他就不表示字段而表示一个字符串了,固定显示为'@c.CustomerID'。
mc920879227 2012-08-13
  • 打赏
  • 举报
回复
c.CustomerID是uniqueidentifier类型的...
  • 打赏
  • 举报
回复
declare @CustomerID varchar(50)
set @CustomerID='990CC7DF-FE11-40C0-8ECC-6546E2A28119'
select convert(uniqueidentifier,@CustomerID)
叶子 2012-08-13
  • 打赏
  • 举报
回复

--你的参数现在是这个样子的
declare @p varchar(30)
set @p='@c.CustomerID'
select @p
/*
@c.CustomerID
*/

--应该是这个样子的
declare @p1 varchar(36)
set @p1=newid()
select @p1
/*
AE9508EE-24D1-4AF2-9285-18373B
*/
  • 打赏
  • 举报
回复
不知道LZ的@c.CustomerID是一个变量呢,还是字符串。
从提示的错误看似乎是c.CustomerID是一个GUID,如果@c.CustomerID是一个变量的话,应该先将其转化为GUID
mc920879227 2012-08-13
  • 打赏
  • 举报
回复
具体点可以吗?我是新手...比如替换成?
昵称被占用了 2012-08-13
  • 打赏
  • 举报
回复
and c.CustomerID='@c.CustomerID'

这里的@c.CustomerID应该替换成一个GUID

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧