如果我运行此查询,我有一个由多个查询和多个表连接的查询我收到如下错误:
- 除非使用IS NULL或LIKE运算符,否则无法比较或排序text,ntext和image数据类型。
- 无法将ntext数据类型选为DISTINCT,因为它无法比较。
醇>
表结构是: Design of tables and datatype
,查询是这样的:
SELECT p.Proj_uid, p.proj_name,p.Agency,p.District,p.Division,p.ProjStatus,Civilbill80.billcount as Civilbill80,
Civilbill20.billcount as Civilbill20 ,Civilbillpay.billcount as FinalCivilBill,CivilWorkslip.billcount as CivilWorkslip,
Electribill80.billcount as Electricbill80, Electribill20.billcount as Electricbill20, Electribillpay.billcount as FinalElectriBill,
ElectriWorkslip.billcount as ElectriWorkslip FROM tempproj p
LEFT JOIN (
SELECT distinct(Proj_name),BillType,COUNT(1) as billcount FROM payment_80 where BillType='CIVIL'
GROUP BY Proj_name, BillType ) Civilbill80 ON Civilbill80.Proj_name = p.proj_name
LEFT JOIN (
SELECT distinct(Proj_name),billtype,COUNT(1) as billcount FROM Payment_20 where billtype='CIVIL'
GROUP BY Proj_name, billtype ) Civilbill20 ON Civilbill20.Proj_name = p.proj_name
LEFT JOIN (
SELECT distinct(Proj_name),BillType, COUNT(1) as billcount FROM payment_80 where BillType='Electric'
GROUP BY Proj_name, BillType ) Electribill80 ON Electribill80.Proj_name = p.proj_name
LEFT JOIN (
SELECT distinct(Proj_name),billtype, COUNT(1) as billcount FROM Payment_20 where billtype='Electric'
GROUP BY Proj_name, billtype ) Electribill20 ON Electribill20.Proj_name = p.proj_name
LEFT JOIN (
SELECT distinct(Proj_name),billtype, COUNT(1) as billcount FROM Payment where billtype='CIVIL'
GROUP BY Proj_name, billtype ) Civilbillpay ON Civilbillpay.Proj_name = p.proj_name
LEFT JOIN (
SELECT distinct(Proj_name),billtype, COUNT(1) as billcount FROM Payment where billtype='CIVIL'
GROUP BY Proj_name, billtype ) Electribillpay ON Electribillpay.Proj_name = p.proj_name
LEFT JOIN (
SELECT distinct(proj_uid),item_type, COUNT(1) as billcount FROM WorkSlipAmounts where item_type='WorkSlip'
GROUP BY proj_uid, item_type ) CivilWorkslip ON CivilWorkslip.proj_uid = p.proj_uid
LEFT JOIN (
SELECT distinct(proj_uid),item_type, COUNT(1) as billcount FROM WorkSlipAmounts where item_type='ElecWorkSlip'
GROUP BY proj_uid, item_type) ElectriWorkslip ON ElectriWorkslip.proj_uid = p.proj_uid
请帮帮我。 非常感谢你
答案 0 :(得分:8)
SQL Server的ntext, text, and image数据类型已过时:
将来的版本中将删除ntext,text和image数据类型 Microsoft SQL Server。避免在新的数据类型中使用这些数据类型 开发工作,并计划修改当前使用的应用程序 他们。请改用nvarchar(max),varchar(max)和varbinary(max)。
可能的解决方案:
2a上。 (正确方法)更改表并将数据类型更改为NVARCHAR/VARBINARY
2B。 (解决方法)或SELECT DISTINCT
使用:CAST(col_name AS NVARCHAR(MAX))
,
与CAST(p.proj_name AS NVARCHAR(MAX)) = CAST(Civilbill20.proj_name AS NVARCHAR(MAX))
答案 1 :(得分:0)
修复糟糕的设计。
在链接表设计中,所有ntext字段都是 - NAMES。真的吗?项目名称最多4gb?
为长度分配合理的限制,然后将其更改为NVARCHAR(x)(长度)。
完成此操作后,修复错误的编程。项目名称必须是唯一的。如果你正确地表达你的查询,就不需要开始(非常昂贵 - 如同很慢)。
最后这会导致2个初学者错误:
在你的情况下,它甚至看起来像所有的不同在逻辑上没有意义,因为数据已经是不同的归功于group by。