参数只能传值,因为存储过程是预编译的,SQL语句不能作为参数;所以你后面这种会出现语法错误如果你非要这样做,那就不用存储过程了,在程序里面动态产生SQL语句来做

解决方案 »

  1.   

    我这样
    declare @strTable varchar(20)
    declare @condition varchar(50)
    declare @strSql varchar(100)
    declare @r_return intselect @strTable = 'sys_template'
    select @condition = 'id=99'@strSql = "select Count(*) from " + @strTable + " where " + @conditionselect @r_return = exec(@strSql)print @r_rerurn这样做也不行
    其实我就是想得到返回的值,我这样做怎么能得到返回值呢?
      

  2.   

    我已经说过了在存储过程中,变量只能用于传字段的值,SQL语句本身是要预编译的,所以不能够向你这样动态产生SQL语句;
    你一定要这么做的话,就不能够使用存储过程,而是使用编程的方式,在程序里面去动态产生SQL语句
      

  3.   

    真是这样,那不是只要是动态的写入的sql语句都不能放在SP中,那SP的功能也就太差了吧,那天思归较了我一招,跟上面最后一种方法差不多,就是没返回值而已,所以,我认为应该是有办法的,成功的SP如下:
    CREATE PROCEDURE sp_strAddData(
    @fieldName varchar(300),
    @fieldValue varchar(300),
    @strTable varchar(20),
    @return varchar(20) output
    ) AS
    declare @m_fieldName varchar(300)
    declare @m_fieldValue varchar(300)
    declare @tempName varchar(50)
    declare @tempValue varchar(50)
    declare @i integer
    declare @j integer
    declare @lenName integer
    declare @lenValue integer
    declare @strSql varchar(500)

    select @m_fieldName = ''
    select @m_fieldValue = ''''
    select @tempName = ''
    select @tempValue = ''
    select @i = 0
    select @j = 0
    select @lenName = len(@fieldName)
    select @lenValue = len(@fieldValue)
    select @strSql =''

    while (@i<=@lenName)
    begin
    select @tempName = substring(@fieldName,@i,1)
    if (@tempName = '&')
    select @m_fieldName = @m_fieldName + ','
    else
    select @m_fieldName = @m_fieldName + @tempName
    select @i = @i+1 
    end while (@j<=@lenValue)
    begin
    select @tempValue = substring(@fieldValue,@j,1)
    if (@tempValue = '&')
    select @m_fieldValue = @m_fieldValue + ''','''
    else
    select @m_fieldValue = @m_fieldValue + @tempValue
    select @j = @j+1 
    end
    select @m_fieldValue = @m_fieldValue + '''' exec ('insert into ' + @strTable + ' (' + @m_fieldName + ') values (' + @m_fieldValue + ')') select @return = 'OK'
    return
    GO
      

  4.   

    用EXEC是不能传值出来的,只有这样
    declare @strTable varchar(20)
    declare @condition varchar(100)
    declare @number intselect @strTable='sys_template'
    select @condition='id=99'EXEC('
    select @number=count(*) from '+@strTable+' where '''+@condition+'''
    print @number
    ')
      

  5.   

    或者
    EXEC('
    select @number=count(*) from '+@strTable+' where '''+@condition+'''')
    SELECT @number = @@ROWCOUNT
    print @number