如果语句仅仅是像你那样的话,
我看做成View好些!不过,我没听说过优化存储过程!! :)

解决方案 »

  1.   

    使用UDF 
    返回值可以是一个表!
      

  2.   

    不好意思,再问一下,什么叫UDF?
      

  3.   

    不好意思,
    再问一下,什么叫UDF?
      

  4.   

    用户自定义函数!user-defined functions
      

  5.   

    create proc returnRS
    as
    select * from Tablename where sex = '男';
      

  6.   

    如果你有百万纪录,一定要设置primary key/unique indexing,在sex字段上也要加index
      

  7.   

    如果检索条件只有性别,那么检索出来的记录也大约会有50万条。这么多的结果记录考虑使用分页显示技术,不然会很慢,效率也会很低,加索引也作用不大,因为sex就两种选择。
    要让存储过程返回结果集,saucer(思归)的写法就可以。
      

  8.   

    bluepower2008说的对,sex这种字段加索引效果并不好,如果表更新频繁的话只会带来的麻烦。
      

  9.   

    這是簡單的返回所需頁面的記錄sql="select top "+PageSize+" * from table where sex = '男' and id<all(select top "+cstr(pageSize*(page-1))+" id from table where sex = '男' order by id desc) order by id desc"這是我用于分頁的語句id為用于排序的字段名,pagesize是每頁行數﹐page為頁數﹐如果排序為asc時﹐把小于號改成大于號把desc改成asc
    但當總行數少于每頁行數時在ACCESS中就不行﹐就只能直接寫select top 12 * from table order by ...了可在存儲過程中這樣定義
    declare @sql nvarchar(1000)
    sql=...以上寫出
    exec sp_executesql @sql
    即可返回所需記錄
    --以下是我寫過的一個分頁存儲過程﹐有興趣看看吧CREATE PROCEDURE [PR_PAGE_USER]
    @L_TOTAL_PAGE INTEGER =NULL OUTPUT
    ,@S_SORT_COL VARCHAR(30)
    ,@S_TABLE_NAME VARCHAR(30)
    ,@S_SORT_TYPE VARCHAR(10) ='DESC'
    ,@L_PAGE_SIZE INT =12
    ,@L_PAGE_NUM INT =1 ASDECLARE @SQL_USER NVARCHAR(500)
    ,@L_ROW INT
    ,@L_TOTAL_COL INTSET @SQL_USER='SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=''' + @S_TABLE_NAME 
    + ''' AND COLUMN_NAME=''' + @S_SORT_COL + ''''
    EXEC SP_EXECUTESQL @SQL_USER
    SET @L_TOTAL_PAGE=@@Rowcount
    IF @L_TOTAL_PAGE = 0 
    BEGIN
    SET @L_TOTAL_PAGE = -1
    RETURN
    END
    ELSEIF @L_PAGE_NUM < 1 SET @L_PAGE_NUM=1SET @SQL_USER='SELECT COUNT(*) FROM ' + @S_TABLE_NAME
    EXEC SP_EXECUTESQL @SQL_USER
    SET @L_TOTAL_COL=@@ROWCOUNTIF FLOOR(@L_TOTAL_COL / @L_PAGE_SIZE) + 1 < @L_PAGE_NUM SET @L_PAGE_NUM = FLOOR(@L_TOTAL_COL / @L_PAGE_SIZE) + 1
    SET @L_TOTAL_PAGE =  FLOOR(@L_TOTAL_COL / @L_PAGE_SIZE) + 1
    IF @S_SORT_TYPE = 'DESC'
    BEGIN
    SET @SQL_USER='SELECT TOP ' + CONVERT(VARCHAR,@L_PAGE_SIZE) + ' * FROM ' + @S_TABLE_NAME + ' WHERE '
    + @S_SORT_COL + ' < ALL(SELECT TOP ' + CONVERT(VARCHAR,(@L_PAGE_NUM - 1) * @L_PAGE_SIZE) + ' ' + @S_SORT_COL 
    + ' FROM ' + @S_TABLE_NAME + ' ORDER BY ' + @S_SORT_COL + ' ' + @S_SORT_TYPE + ' ) ORDER BY ' + @S_SORT_COL  + ' ' 
    + @S_SORT_TYPE +';'
    END
    ELSE
    BEGIN
    SET @SQL_USER='SELECT TOP ' + CONVERT(VARCHAR,@L_PAGE_SIZE) + ' * FROM ' + @S_TABLE_NAME + ' WHERE '
    + @S_SORT_COL + ' > ALL(SELECT TOP ' + CONVERT(VARCHAR,(@L_PAGE_NUM - 1) * @L_PAGE_SIZE) + ' ' + @S_SORT_COL 
    + ' FROM ' + @S_TABLE_NAME + ' ORDER BY ' + @S_SORT_COL + ' ' + @S_SORT_TYPE + ' ) ORDER BY ' + @S_SORT_COL  + ' ' 
    + @S_SORT_TYPE +';'
    END
    EXEC SP_EXECUTESQL @SQL_USER
      

  10.   

    只要存储过程的最后是一句是select ,返回的就是一个结果集,例子上面很多了