首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

又来问有关问题了

2012-12-16 
又来问问题了。exec dbo.ExecSelectSql m_user,m_id,m_nick,m_img, m_id in (Select Top 1 m_idoluid

又来问问题了。
exec dbo.ExecSelectSql 'm_user','m_id,m_nick,m_img',' m_id in (Select Top 1 m_idoluid from m_my_otherinfo Where m_uid = 1) ',' m_id desc ',0

提示:将 varchar 值 '2,3,4,5,6' 转换为数据类型为 int 的列时发生语法错误。
Select Top 1 m_idoluid from m_my_otherinfo Where m_uid = 1
得到的值是:2,3,4,5,6
应该肿么解决啊?
[最优解释]
   --该函数把传递过来的字符串转换成IN 后面的列表,可以处理以分号,逗号以及空格分隔的字符串              
CREATE  FUNCTION [GetInStr]               
             (@SourceStr varchar(8000))--源字符串              
              
RETURNS  @table table(list  varchar(40) )                
  AS                
BEGIN              
           
  select @sourcestr =  replace(@sourcestr,';',',')                  
  select @sourcestr =  replace(@sourcestr,'\',',')      
  select @sourcestr =  replace(@sourcestr,'/',',')     
  select @sourcestr =  replace(@sourcestr,'.',',')               
 -- select @sourcestr = replace(@sourcestr,' ',',')              
 --declare @OutStr varchar(200)           
               
   if charindex(',',@sourcestr)>0                
    begin              
      declare @i int              
      declare @n int              
      set @i=1              
      while charindex(',',@sourcestr,@i)>0              
        begin              
           set @n=charindex(',',@sourcestr,@i)              
           insert into @table values(substring(@sourcestr,@i, @n-@i) )              


           set @i=@n+1              
        end              
        insert into @table values(substring(@sourcestr,@i,len(@sourcestr)-@i+1))              
    end  else insert into @table values(@sourcestr)              
              
  delete from @table where isnull(list,'') = ''              
return              
END   


然后把你的查询放到这个参数里面
[其他解释]
exec dbo.ExecSelectSql 'm_user','m_id,m_nick,m_img',' convert(int,m_id) in (Select Top 1  m_idoluid from m_my_otherinfo Where m_uid = 1) ',' m_id desc ',0

这样呢?
[其他解释]
试试

exec dbo.ExecSelectSql 'm_user','m_id,m_nick,m_img',' m_id in (Select Top 1 convert(varchar(128),m_idoluid)m_idoluid from m_my_otherinfo Where m_uid = 1) ',' m_id desc ',0

[其他解释]
引用:
试试


SQL code?



1

exec dbo.ExecSelectSql 'm_user','m_id,m_nick,m_img',' m_id in (Select Top 1 convert(varchar(128),m_idoluid)m_idoluid from m_my_otherinfo Where m_uid = 1) ',' m_id desc ',……


不行啊。
[其他解释]
引用:
exec dbo.ExecSelectSql 'm_user','m_id,m_nick,m_img',' convert(int,m_id) in (Select Top 1  m_idoluid from m_my_otherinfo Where m_uid = 1) ',' m_id desc ',0

这样呢?

不行额。
[其他解释]
那可能是你这个ExecSelectSql 里面出错,按常理,拼接好一个完整语句后才执行的。
[其他解释]
不是啊。
我这样写:
select top 10 * from m_user where m_id in (Select Top 1 m_idoluid from m_my_otherinfo Where m_uid = 1)
也是提示错误啊。
[其他解释]
因为你的值是2,3,4,5这样的东西,可能要用个函数把这个值转换成表。
[其他解释]
Select Top 1 m_idoluid from m_my_otherinfo Where m_uid = 1
你这个查询出来是一个字符串啊,这样用肯定会报表的.

你可以写一个表函数把字符串转化,表结果集,这样用in就没问题了
[其他解释]


引用:
因为你的值是2,3,4,5这样的东西,可能要用个函数把这个值转换成表。



引用:
Select Top 1 m_idoluid from m_my_otherinfo Where m_uid = 1
你这个查询出来是一个字符串啊,这样用肯定会报表的.

你可以写一个表函数把字符串转化,表结果集,这样用in就没问题了

不会写额。。帮忙写个撒。。

截图。





[其他解释]
引用:
不是啊。
我这样写:
select top 10 * from m_user where m_id in (Select Top 1 m_idoluid from m_my_otherinfo Where m_uid = 1)
也是提示错误啊。


这种写发肯定是错的. 因为m_idoluid 返回的字符串,你用in 会强制软换为int行
[其他解释]
引用:
--该函数把传递过来的字符串转换成IN 后面的列表,可以处理以分号,逗号以及空格分隔的字符串              
CREATE  FUNCTION [GetInStr]               
             (@SourceStr varchar(8000))--源字符串              
              
RETURNS  @tabl……

..........

select top 10 *  from m_user where m_id in (GetInStr(Select Top 1 m_idoluid from m_my_otherinfo Where m_uid = 1))

服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'Select' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: ')' 附近有语法错误。
[其他解释]
..............哥 这是表变量
要这样用 select * from getinstr()
[其他解释]
引用:
..............哥 这是表变量
要这样用 select * from getinstr()


咋我感觉不对呢。。我一直都是这样使用函数的啊。。
那我这个SQL语句该怎么改?
select top 10 *  from m_user where m_id in (Select Top 1 m_idoluid from m_my_otherinfo Where m_uid = 1)
[其他解释]
select top 10 *  from m_user where m_id in (select * from getinstr(Select Top 1 m_idoluid from m_my_otherinfo Where m_uid = 1))
[其他解释]
引用:
select top 10 *  from m_user where m_id in (select * from getinstr(Select Top 1 m_idoluid from m_my_otherinfo Where m_uid = 1))


select top 10 *  from m_user where m_id in (select * from getinstr(Select Top 1 m_idoluid from m_my_otherinfo Where m_uid = 1))
服务器: 消息 156,级别 15,状态 1,行 1
在关键字 'Select' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: ')' 附近有语法错误。

还是这样。。。。
------其他解决方案--------------------


是哦,函数里面不能再用查询,你得变方式了.你这个方法行不通
[其他解释]

引用:
select top 10 *  from m_user where m_id in (select * from getinstr(Select Top 1 m_idoluid from m_my_otherinfo Where m_uid = 1))


哥们。给力点行吗?
[其他解释]
存储过程 里面的的参数还有拼语句,好像不行,都没这样用过.想其他办法吧
[其他解释]
引用:
是哦,函数里面不能再用查询,你得变方式了.你这个方法行不通


那该怎么改?
[其他解释]
引用:
Select Top 1 m_idoluid from m_my_otherinfo Where m_uid = 1 你把这个结果当一个变量传到存储过程不行么

好吧。。

写一个存储过程。那这个存储过程怎么写???还不是得使用这个。。。哎

其实我就是想一个SQL语句搞定。。谁知道。这么麻烦。还是得先取出里面的值。再传递进去。
[其他解释]
Select Top 1 m_idoluid from m_my_otherinfo Where m_uid = 1 你把这个结果当一个变量传到存储过程不行么 

热点排行