我有个简单的问题。
我想创建一个查询的存储过程select @wh1 from Table_name where [id]=@wh2 and [name]=@wh3就是有个表。我想用wh1确定要查找的列。用wh2和wh3确定查找的条件
应该怎么办???建立的存储过程怎么执行???

解决方案 »

  1.   

    用動態SQL語句
    Declare @S Varchar(1000)
    Select @S = 'select ' + @wh1 + ' from Table_name where [id]=' + Rtrim(@wh2) + ' and [name]= ''' + @wh3 + ''''
    EXEC(@S)
      

  2.   

    CREATE PROCEDURE procSelectWh1
       (
           @wh2 INT,
           @wh3 varchar(20)
        )
    AS
    BEGIN
          select @wh1 from Table_name 
          where ( ID = @wh2 )
                AND( name = @wh3 )
    END
    GO
    -------------
    执行
    EXECUTE procSelectWh1 'id','name'
      

  3.   

    paoluo(一天到晚游泳的鱼)
    写得具体点好不好啊??
      

  4.   

    zst126(皮皮) 
    你的也是不行啊,,,
      

  5.   


    --創建測試環境
    Create Table TEST(ID Int Identity(1, 1) ,Name Varchar(10), Address Varchar(10))
    GO
    --插入數據
    Insert TEST Select 'AA', 'AAA'
    Union All Select 'BB', 'BBB'
    Union All Select 'CC', 'CCC'
    GO
    --建立存儲過程
    Create Procedure SP_TEST
    (@wh1 Varchar(100),
     @wh2 Int,
     @wh3 Varchar(100))
    As
    Begin
    Declare @S Varchar(1000)
    Select @S = 'select ' + @wh1 + ' from TEST where [id]=' + Rtrim(@wh2) + ' and [name]= ''' + @wh3 + ''''
    EXEC(@S)
    End
    GO
    --測試
    EXEC SP_TEST 'Name, Address', 1, 'AA'
    EXEC SP_TEST 'Name', 2, 'BB'
    GO
    --刪除測試環境
    Drop Table TEST
    Drop Procedure SP_TEST
    --結果
    /*
    Name Address
    AA AAAName
    BB
    */
      

  6.   

    就是那麼用的,可能你沒有調試好。zst126(皮皮) 的語句有問題
      

  7.   

    select @wh1 from Table_name where [id]=@wh2 and [name]=@wh3字段名和表名做为参数,必须要写成动态的sqlexec('select '+@wh1+' from table where id='+@wh2+' and name='+@wh3)
      

  8.   

    paoluo(一天到晚游泳的鱼)
    可以了,谢谢
    但是我还想问下
    ' and [name]= ''' + @wh3 + ''''这里的"'"怎么看的啊?
      

  9.   

    如果字段不多的话
    if @wh1='a'
       select a from Table_name where [id]=@wh2 and [name]=@wh3
    elseif @wh1='b'
       select b from Table_name where [id]=@wh2 and [name]=@wh3
    else
       select c from Table_name where [id]=@wh2 and [name]=@wh3
      

  10.   

    ' and [name]= ''' + @wh3 + ''''
    可以拆開為這麼看' and [name]= '' ' + @wh3 + '  ''  '
    1             2  3          4  5   6           一般查詢的時候是這樣的, and name = 'AA'組合動態語句的時候, 一個"'"用兩個代替。1和3是一組單引號,4和6是一組單引號。2和5都是兩個單引號,就是相當於AA前後的單引號。表達能力不好,不知道講明白沒有. :)
      

  11.   

    那如果字段很多的话,应该怎么办呀,比如说我现在就有一个问题是要对搜集到的数据做统计的,我编了这样一个存储过程:
    我编一个存储过程dbo.formaNo是以字段名做为参数, 写法如下:
    CREATE PROCEDURE dbo.formaNo
    (                                         
    @FieldName char(50),@str char(50)

    )
    AS 
    declare @sqlstmt nvarchar(4000) set @sqlstmt='select count(*) from Eval where '+@FieldName+'=''+@str+'''
      EXEC sp_executesql @sqlstmt
    return
    GO
    其中表Eval是:
    Eid cid uname score1 score2 score3 score4 score5 score6
    1 2 admin 良 优 良 合格 良 良
    2 2 ldkf 良 优 良 优 合格 优
    …………还有很多指标字段score7,score8,score9,score10……,
    执行存储过程:
    execute formaNo score1,良
    但不管参数值怎么改变,其返回结果永远是0,我弄了好久好久都不很有知道哪出错了