我的SQL语句在sql中能显示sname字段值,却在页面上无法输出,求高人解决!

select *,left(shengname,len(shengname)-1) as sname
from (
select distinct t1.*,
(
select shengname+','
from zhms_sheng
where (PATINDEX(CAST(shengid as nvarchar)+',%',t1.adarea)>0 or PATINDEX('%,'+CAST(shengid as nvarchar)+',%',t1.adarea)>0 or PATINDEX('%,'+CAST(shengid as nvarchar),t1.adarea)>0) for xml path('')
) as shengname
from zhms_ad as t1
) as t
Order By id Desc
--sql语句无错,页面条用无错,就是不出来sname的值,其他的都可以。
试过N中办法,仍然无法将sname输出到页面(比如<%=rs("sname")%>),程序和sql都无问题,可能是其中一些不为人知的原因,先暂时保留此问题,待高手解决,每隔一天加10分。

你说的这个问题,我从前遇到过。

解决办法:
不要用别名去获取数据,用下标。

理由(该理由纯属猜测):
我猜测由于别名是你自己定义的,系统没有把这个别名传进去,或者数据集里,根本什么名字都不存,只存和表字段的对应,但是名字虽然没有,数据却还在,所以可以用下标来访问。

PS:
查询用* ,虽然是合法的,但一般不要这么用,特别是后面带别名的。某些数据库会对你的sql语句进行优化,重排你的数据顺序,当你用下标访问的时候,得不到你想要的数据,把*改成一个个字段名,会获得你想要的下标,当然,也不是所有数据库都会进行这样的优化。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-01
你把第一行语句里面的星号换成每一列的列名。追问

不行,试过了

追答

SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
这是左连接的语法。你参考一下。

追问

这样说吧!我这个语句是将表zhms_ad里面的adarea存放的(1,2,3)省ID到zhms_sheng表里面去获取相应的省名称,然后组成新表(安徽省,北京市,山东省)。

追答

你说在SQL中能显示,但是在页面上无法输出。这个输出是什么意思。按照你的追问,你的意思是一个表里面的用的是省的ID以及其他信息,另一个表存的是省的ID以及名称,你组成的新表是由这两个表组合而成的。这个思路没有问题,语句我没有发现什么错误。输出显示不出来是不是跟你的页面设置分辨率有关也不一定。如果在SQL中能显示出来,输出的话没道理看不到的。你这里面括号够多的。不过如果你不嫌麻烦的话可以再新增一个——第一个FROM后面增加一个,一直括到倒数第二行t后面。

相似回答