求助!  请高手门帮我看看
alter proc [dbo].[GetCp]
@count int,
@uset int,
@oname varchar(50)
as
declare @sql varchar(5000)
if(@count=1)
begin
  if(@uset=1)
  begin
  set @sql='SELECT TOP 10 *FROM tb_CpMain inner join tb_userinfo on tb_userinfo.uid=tb_CpMain.uid ORDER BY oid desc'
  end
  if(@uset=2)
  begin
  set @sql='SELECT TOP 10 *FROM tb_CpMain inner join tb_userinfo on tb_userinfo.uid=tb_CpMain.uid where oname='+str(@oname)+'
 ORDER BY oid desc'
  end
end
else
begin
  set @sql='SELECT TOP 10 * FROM tb_CpMain inner join tb_userinfo on tb_userinfo.uid=tb_CpMain.uid
        WHERE (oid NOT IN (SELECT TOP '+str((@count-1)*10)+'  oid 
         FROM tb_cpmain inner join tb_userinfo on tb_userinfo.uid=tb_CpMain.uid
         ORDER BY oid desc))
ORDER BY oiD desc'
end
exec (@sql)我执行的时候 exec 1,2'中国'
为什么提示一个 
服务器: 消息 207,级别 16,状态 3,行 1
列名 ‘中国’ 无效。

解决方案 »

  1.   

    回6楼
    我知道
    我是这样写的。
    我觉得因该是
    oname='+str(@oname)+'
    这里错了。。但是不知道是什么原因错了~
      

  2.   

    oname='+str(@oname)+' 改成oname='+oname+' 试试?
    你表里面字段oname是什么类型的?
      

  3.   

    试过了 也一样。。我的是nvarchar(50)
      

  4.   

    alter proc [dbo].[GetCp] 
    @count int, 
    @uset int, 
    @oname varchar(50) 
    as 
    declare @sql varchar(5000) 
    把红色部分改为 nvarchar(50)试试。
    那个str()函数不要加了。
      

  5.   

    我知道了
    改为:
    set @sql='SELECT TOP 10 *FROM tb_CpMain inner join tb_userinfo on tb_userinfo.uid=tb_CpMain.uid where oname='''+@oname+''' 
    ORDER BY oid desc' 
      

  6.   

    Good luck!
    回家看一休去咯。