上次问问题zzxap大哥给解决了,现在又有问题了,这段代码是以表中相同的一列的值最为新列插入到表的后面,我觉得一般的人不一定看得懂源代码是这样
declare @Sql nvarchar (4000)
set @Sql = 'select ccuscode,ccusname'
select @Sql = @Sql + ' ,case ccusname when ''' + ccusname + ''' then pubufts end [' + ccusname + ']'
from (select distinct top 50 CCusName from customer) a
set @Sql = @Sql + ' from customer '
print @Sql
print len(@Sql)
exec (@Sql)现在我要在customer表里再做一个子查询,就改成这样declare @Sql nvarchar (4000)
set @Sql = 'select ccuscode,ccusname'
select @Sql = @Sql + ' ,case ccusname when ''' + ccusname + ''' then pubufts end [' + ccusname + ']'
from (select distinct top 50 CCusName from (select * from customer) b) a
set @Sql = @Sql + ' from b '
print @Sql
print len(@Sql)
exec (@Sql)可是提示对象名 b 无效
怎么办
declare @Sql nvarchar (4000)
set @Sql = 'select ccuscode,ccusname'
select @Sql = @Sql + ' ,case ccusname when ''' + ccusname + ''' then pubufts end [' + ccusname + ']'
from (select distinct top 50 CCusName from customer) a
set @Sql = @Sql + ' from customer '
print @Sql
print len(@Sql)
exec (@Sql)现在我要在customer表里再做一个子查询,就改成这样declare @Sql nvarchar (4000)
set @Sql = 'select ccuscode,ccusname'
select @Sql = @Sql + ' ,case ccusname when ''' + ccusname + ''' then pubufts end [' + ccusname + ']'
from (select distinct top 50 CCusName from (select * from customer) b) a
set @Sql = @Sql + ' from b '
print @Sql
print len(@Sql)
exec (@Sql)可是提示对象名 b 无效
怎么办
解决方案 »
- cmd.EexcuteReader()和cmd.ExecuteReader(ConnectBeHavior.CloseConnection)有什么区别?
- textbox输入框
- CS1519: 类、结构或接口成员声明中的标记“(”无效
- 两个Datalist怎么绑定啊??????
- 实现加减法
- 页面数值传送问题?
- 感谢goody9807帮忙解答问题,goody9807进来接分.......
- VS2005怎么制作工具条?
- 打开项目时说我路径不对,不知道怎么搞?
- ODBC连接:未发现数据源名称并且未指定默认驱动程序(在线等待)
- Gridview.Repeater和DataList三者的关系以及区别
- ObjectDataSource和SqlDataSource二者的优点以及使用场合
你的这句是什么意思???
删除就好了
select distinct top 50 CCusName from (select * from customer) bselect distinct top 50 CCusName from customer这两个结果又区别吗?
脱了裤子放屁
这句set @Sql = @Sql + ' from b '
你的方法我想到了,事实情况是那个子查询select * from customer 其实是一个非常复杂的查询,这样的话岂不是又查了一边,有没有我用再查一遍的方法
虽然是“脱了裤子放屁” 但这里并没有错错的是后面 :set @Sql = @Sql + ' from b ' 你自己都看不懂了,拼这么复杂干吗?乱
楼主数据库是2000的还是05的,要是05的就用CTE
如您所说,我原来就是临时表的,这不是想改成sql嘛
b AS(
select * from customer --换成你要的查询
)
declare @Sql nvarchar (4000)
set @Sql = 'select ccuscode,ccusname'
select @Sql = @Sql + ' ,case ccusname when ''' + ccusname + ''' then pubufts end [' + ccusname + ']'
from (select distinct top 50 CCusName from b) a
set @Sql = @Sql + ' from b '
print @Sql
print len(@Sql)
exec (@Sql)
你把打印出来的sql拿去检验一下就知道错误了,按你写的,最后是:
select ccuscode,
ccusname,
case ccusname
when 'ccusname' then
pubufts
end ccusname
from (select distinct top 50 CCusName from (select * from customer) b) a
from b最后那个from b,是哪个b?
你拼接SQL,要先保证你拼的Sql执行没错,再去拼接
而且在Sql的上下文中还没有处于一级。
你还是在select * from customer一下吧!
你把这句改成from (select distinct top 50 CCusName from ((select * from customer) b)) a
试试
因为你那样写的那个b不是指代的你想查询的b