none
求助SQL 存储过程 返回查询集合的困惑 RRS feed

  • 问题

  • 小弟写了一个常用的存储过程  基本上是经由设置@thatpattern

    变量后去查询得到pattern 但是我在运行这个预存程序后 发现

    它只能返回一笔数据 但我数据表内 明明有多笔相同的thatpattern的数据

    要返回pattern的数据集合 下面的写法却只返回一条 求助该如何写

    这里的SQL语法 该怎么写 才能辅合我的要求呢?

    create PROC aiml2that匹配流程
    
    (
    
    @thatpattern Varchar(5000),
    
    @pattern text OUTPUT)
    
    AS
    
    BEGIN
    
        SELECT @pattern=pattern FROM aiml2
    
        WHERE  thatpattern=@thatpattern
    
    END  
    
    Declare @thatpattern Varchar(5000),@pattern Varchar(5000)
    
    Set @thatpattern ='MY FAVORITE SUBJECT IS ARTIFICIAL INTELLIGENCE AND ROBOTS'
    
    select  @pattern=pattern from aiml2  WHERE  thatpattern=@thatpattern order by pattern asc
    
    select  @pattern


    2012年7月27日 10:16

答案

  • 既然是返回结果集,那就不要做变量赋值的操作,直接查询就行了

    select  pattern from aiml2  WHERE  thatpattern=@thatpattern order by pattern asc

    • 已标记为答案 向恩 2012年7月27日 12:33
    2012年7月27日 11:52
  • 不要把结果集的多条数据赋值给一个变量。

    create PROC aiml2that匹配流程
    (
    @thatpattern Varchar(5000)
    )
    AS
    BEGIN
        SELECT 
            pattern 
        FROM aiml2
        WHERE  thatpattern=@thatpattern
    END

    • 已标记为答案 向恩 2012年7月27日 12:33
    2012年7月27日 12:18
    版主

全部回复

  • 既然是返回结果集,那就不要做变量赋值的操作,直接查询就行了

    select  pattern from aiml2  WHERE  thatpattern=@thatpattern order by pattern asc

    • 已标记为答案 向恩 2012年7月27日 12:33
    2012年7月27日 11:52
  • 不要把结果集的多条数据赋值给一个变量。

    create PROC aiml2that匹配流程
    (
    @thatpattern Varchar(5000)
    )
    AS
    BEGIN
        SELECT 
            pattern 
        FROM aiml2
        WHERE  thatpattern=@thatpattern
    END

    • 已标记为答案 向恩 2012年7月27日 12:33
    2012年7月27日 12:18
    版主
  • 恩恩 改成这样 可以了 因为之前参考书上的范例 预存程序的查询 都是将数据赋值给一个变量

    不太理解这样实际上的差异性 

    那如果只有一条数据时 其实用上面的语法也可以得到相通的结果 只不过这是只有一条数据的集合吧


    2012年7月27日 12:32
  • 补充问一个问题  因为之前我是用entity的技术 去调用存储过程  之前的数据并不是集合

    所以可以用以下的代码 去回传数据库的资料 

     Private entities As New 語句資料庫Entities

    Dim Aiml As New ObjectParameter("aiml", GetType(String)) '輸出參數

                '執行預存程序
                entities.aiml2查詢流程(rawInput, Aiml)
           
                Dim xmlS As String = Aiml.Value

    但现在改成回传集合  该怎么修改这里的代码 才能处理这些集合的数据呢?

    2012年7月27日 13:59
  • 补充问一个问题  因为之前我是用entity的技术 去调用存储过程  之前的数据并不是集合

    所以可以用以下的代码 去回传数据库的资料 

     Private entities As New 語句資料庫Entities

    Dim Aiml As New ObjectParameter("aiml", GetType(String)) '輸出參數

                '執行預存程序
                entities.aiml2查詢流程(rawInput, Aiml)
           
                Dim xmlS As String = Aiml.Value

    但现在改成回传集合  该怎么修改这里的代码 才能处理这些集合的数据呢?

    你好,

    从你的问题上来看,是有关VB的问题,你可以去下面这个VB论坛重新提出你的问题。

    http://social.microsoft.com/Forums/zh-CN/vbasiczhchs/threads

    Thanks.


    Please remember to mark the replies as answers if they help and unmark them if they provide no help. This can be beneficial to other community members reading the thread.

    2012年7月31日 2:42
    版主