数据库有表
A(A1,A2)
AA,AA
BB,BB
CC,CC
DD,DD
EE,EE
FF,FF
......如我有一存储过程,如下:ALTER PROCEDURE [dbo].[AAAAA] 
@p varchar(50)=null
AS
BEGIN    select * from Test5END
我想通过参数传递(@p)来补充完整SQL语句,如在 select * from Test5 的后面加上  where A1='CC'我想达到的效果是
不传参数时,就做 select * from Test5
传参数时,参数直接写入后半段语句,实际做的就是 select * from Test5 where A1='CC'我的问题是在存储过程中 @p 怎么放? 像这样:select * from Test5 @p 是不行的
查询分析器里这么写? 像这样: exec AAAAA ' where A1=''''CC'''  (这里单引号好多,都搞不清了)   ?????

解决方案 »

  1.   

    上面 有写错 from 后面是应该是 表A
      

  2.   

    ALTER PROCEDURE [dbo].[AAAAA] 
    @p varchar(50)=null
    AS
    BEGIN
        declare @sql varchar(8000)
        select @sql = 'select * from Test5'+ isnull(@p,'')
        exec(@sql)END
      

  3.   

    ALTER PROCEDURE [dbo].[AAAAA] 
    @p varchar(50)=''
    AS
    BEGIN    exec('select * from Test5 '+@p)END
      

  4.   

    ALTER PROCEDURE [dbo].[AAAAA] 
    @p varchar(50)=null
    AS
    BEGIN    select * from Test5 where A1=@PEND
    goexec aaaaa 'CC'
      

  5.   


    ALTER PROCEDURE [dbo].[AAAAA] 
    @p varchar(50)=null
    AS
    BEGIN    exec ('select * from A '+@p)END
      

  6.   

    ALTER PROCEDURE [dbo].[AAAAA] 
    @p varchar(50)=null
    AS
    BEGIN
        declare @sql varchar(8000)
        set @sql='select * from Test5 '+@p
        exec(@sql)
    END
    go
      

  7.   

    declare @s VARCHAR(800)
    select @S = 'where x=''1'''
    declare @sql varchar(8000)
    select @sql ='select * from test '+@sexec(@sql)
      

  8.   

    大家注意注意!!!!!!!问下问下::: 能不能 不用 exec 的方式啊!!!!!!!!!!!!!!
      

  9.   

    ALTER PROCEDURE [dbo].[AAAAA] 
    @p varchar(50)=null
    AS
    BEGIN
        declare @sql varchar(8000)
        if @p is null
           set @sql='select * from Test5 '
        else
           set @sql=''  --这里根据需要去拼语句
        exec(@sql)
    END
    go
      

  10.   

    你的描述就不清楚,你@p传过来的是什么东西?
    假如参数@p传过来的是'CC'而不是 where A1='CC',那么ALTER PROCEDURE [dbo].[AAAAA] 
    @p varchar(50)=null
    AS
    BEGIN
        select * from Test5 where A1=isnull(@p,A1)
    END
    go假如参数传过来是where A1='CC' ,那么最好就是用exec来执行动态语句了
      

  11.   


    是我弄错了 -_-!你那样传参数的话,好像没有exec以外的方法
      

  12.   


    ALTER PROCEDURE [dbo].[AAAAA] 
    @p varchar(50)=null
    AS
    BEGIN
        declare @sql varchar(1000)
        set @sql='select * from Test5'+@p
        exec(@sql)
    END
      

  13.   

    大家大家大家    exec的方式类似上面其他人的   就别再往上贴了 50分不够分的......