这个视图查询可现实正常的数据,但是count就会出错,是什么原因呢?
这个sql语句是 select count(*) from v_customer
这个是我写的一个视图
你的这个视图中数据量有多大?
没啥数据量吧 就几百条而已
@小白拜: 你试下select count (1) from v_customer这个正常吗?
@合抱之木,生于毫末: 不正常 就是报字符转换错误的那个问题
@小白拜: 那这么来,你单独count e,b,d这3张表试下
@合抱之木,生于毫末: 没问题 能查询
@小白拜: 那接着就是把e,b关联起来后进行count看下正常不
@合抱之木,生于毫末: 不行
@小白拜: 还是报的那个错?
@合抱之木,生于毫末: 恩 对的
@小白拜: 你把你的视图复制发下,不要截图,我试着改下,有些地方看着有点不舒服。
@合抱之木,生于毫末: (select a.*,b.OutAmount,b.WithdrawalAmount from EUnit a inner join CustomerAmount b on (a.UnitID=b.CustomerId and a.UnitTypeID=7 AND LEN(A.UnitID)<32)) e
left join
(select c.BankAccount,c.CustomerID,d.BankName,c.ReceivingBank from CustomerBack c inner join CustomernReceivingBank d on c.ReceivingBank=d.BankID where c.IsDefault=1) b
on (e.UnitID=b.CustomerID AND LEN(e.UnitID)<32)
left join dbo.TCustomerLevel d on e.CustomerLevelID=d.CustomerLevelID
@小白拜: 你执行这个语句试下:
select COUNT(*)
from (select a.*
,b.OutAmount
,b.WithdrawalAmount
from EUnit a inner join CustomerAmount b on a.UnitID=b.CustomerId
where a.UnitTypeID=7 AND LEN(A.UnitID)<32) t1
left join (select c.BankAccount
,c.CustomerID
,d.BankName
,c.ReceivingBank
from CustomerBack c inner join CustomernReceivingBank d on c.ReceivingBank=d.BankID where c.IsDefault=1) t2
on t1.UnitID=t2.CustomerID
left join dbo.TCustomerLevel t3 on t1.CustomerLevelID=t3.CustomerLevelID
@合抱之木,生于毫末: 一样 还是会报错
@小白拜: t1.UnitID=t2.CustomerID 这两个字段中哪个是字符串类型?哪个是int类型?
@合抱之木,生于毫末: 都是字符串类型 但是unitid里面存的有int类型的数据和GUID的数据
@小白拜:检查下数据吧,应该是join的条件一边数据有问题。要么你就全部convert成varchar再join
我咋看不到图片
不知道怎么回事没加上,现在又加了一次好了
图片呢???
不好意思,不知道怎么没加上 现在加上了
里面有乱码?
@顾晓北: 没有乱码 只是有个字段 里面存的有数字 也有GUID
不count
select * from v_customer 会报错吗
不会 查询不会报错 但是count就会报错
@小白拜: 这就奇怪了 你v_customer 是视图吧 贴出来给别人看看
@小白拜: 如果你select * from v_customer 不报错 那你count 肯定是没问题的 应该是视图的问题
@Summer、: 但是我现在select * 是没有问题的 但是count就报错
@小白拜: 这不科学啊 我自己建视图 select count(*)或者count(字段名)都没问题
你试试count(1)
@Summer、: 字段名 * 1 都用过了 不行 我也很奇怪这个情况是怎么回事
不要使用 *
,将其换成一个唯一的字段或者是主键。
试过了 不行才问的
请问一下这个问题是怎么解决的 我也碰到了这个问题