当前位置: 代码迷 >> Sql Server >> 带有输入参数并返回记录集的有关问题
  详细解决方案

带有输入参数并返回记录集的有关问题

热度:36   发布时间:2016-04-24 09:15:59.0
带有输入参数并返回记录集的问题
本帖最后由 yaxiya 于 2015-04-02 11:06:36 编辑
通过command对象调用存储过程,有一个输入参数,返回记录集;经过测试,发现 response.Write(rs.recordcount)没有输出记录集数目;这是哪里出现了问题?
语句select * from menu_second_t where  second_id in (1,2,3,4) 在sql查询窗口执行是没有问题,而且也显示记录;

<%
        inputInfo="1,2,3,4"
Set MyComm = Server.CreateObject("ADODB.Command")
     dCmdSPStoredProc = 4              
                adParamReturnValue = 4
                adParaminput = 1
                adParamOutput = 2
                adInteger = 3
                adVarChar = 200
                adVarWChar = 202
    with MyComm
       .ActiveConnection = Conn                        
       .CommandText      = "power_show_p"       
       .CommandType      = 4                           
       .Prepared         = true                 
       .Parameters.append .CreateParameter("@LimitStr",adVarChar,adParaminput,32,inputInfo)
        set rs = .Execute  
    end with
    response.Write(rs.recordcount)
%>



create procedure power_show_p 
 @LimitStr  varchar (32)  
as  
 SET   NOCOUNT   ON 
 begin 
       select * from menu_second_t  where second_id in (@LimitStr)
end

------解决思路----------------------
这句话这样是错的
select * from menu_second_t  where second_id in (@LimitStr)
你的@LimitStr是字符串,怎么能直接用IN呢...

改成这样吧
Declare @SQLTXT NVARCHAR(1000)
SET @SQLTXT = N'select * from menu_second_t  where second_id in (' + @LimitStr + ')'
EXEC(@SQLTXT)
------解决思路----------------------
引用:
通过command对象调用存储过程,有一个输入参数,返回记录集;经过测试,发现 response.Write(rs.recordcount)没有输出记录集数目;这是哪里出现了问题?
语句select * from menu_second_t where  second_id in (1,2,3,4) 在sql查询窗口执行是没有问题,而且也显示记录;

<%
        inputInfo="1,2,3,4"
Set MyComm = Server.CreateObject("ADODB.Command")
     dCmdSPStoredProc = 4              
                adParamReturnValue = 4
                adParaminput = 1
                adParamOutput = 2
                adInteger = 3
                adVarChar = 200
                adVarWChar = 202
    with MyComm
       .ActiveConnection = Conn                        
       .CommandText      = "power_show_p"       
       .CommandType      = 4                           
       .Prepared         = true                 
       .Parameters.append .CreateParameter("@LimitStr",adVarChar,adParaminput,32,inputInfo)
        set rs = .Execute  
    end with
    response.Write(rs.recordcount)
%>



create procedure power_show_p 
 @LimitStr  varchar (32)  
as  
 SET   NOCOUNT   ON 
 begin 
       select * from menu_second_t  where second_id in (@LimitStr)
end

如果inputInfo是单个值(比如inputInfo='2'),你的存储过程这么写没问题
如果inputInfo是多个值,就要拼SQL了

create procedure power_show_p 
     @LimitStr  varchar (32)  
as  
 SET   NOCOUNT   ON 
 begin 
  declare @sql varchar(2000)
          set @sql = 'select * from menu_second_t  where second_id in ('+@LimitStr+')'
          print @sql
          exec(@sql)
end

  相关解决方案