本帖最后由 chirea 于 2012-05-05 00:21:21 编辑

解决方案 »

  1.   

    declare @a nvarchar(100),@b int;
    set @b=20;
    set @a='select '+ltrim(@b)+'-2';
    exec(@a)这样?
      

  2.   

    declare @a nvarchar(100),@b int;
    set @b=20;
    set @a=ltrim(@b-2);
    exec('print '+@a);
      

  3.   

    declare @a nvarchar(100),@b int;
    set @b=20;
    set @a=ltrim(@b-2);
    exec('print '+@a);
      

  4.   

    不是这样,我是一个字符串里面有一个变量,但这个变量是由用户提供的,所有什么办法可以直接调用到外面的值呢?
    也就是用print @a是显示的是@b-1 这样的值可以直接与申明的值做运行,因为这里面我可能是日期可能是别的类型。declare @a nvarchar(100),@b int;
    set @b=20;
    set @a='@b-2';
    exec(@a)
      

  5.   

    因为从set @a='@b-2';
    @a引号开始,都是由用户跟着我的程序输入进来的,有可能是日期,有可能是逻辑判断
      

  6.   

    我把题重新整理一下
    我要拼接字符串,
    declare @a int,@b int, @GSResule nvarchare(1000)
    set @a=3,
    set @b=4,select @GSResule='select gs from test' --这里面查询出来的变量会有很多个,
    @GSResule=--这个变量里面的值会有些计算方法还有一些变量,如现在这个值是@a>@b
    --这个@a与@b这个变量如何运行
    --如果直接用exec(@GSResule)会提示@a,@b没有申明变量
      

  7.   

    sp_executesql
    下面的示例创建并执行一个简单的 SELECT 语句,其中包含名为 @level 的嵌入参数。
    execute sp_executesql 
              N'select * from pubs.dbo.employee where job_lvl = @level',
              N'@level tinyint',
              @level = 35
      

  8.   


    declare @a int,@b int, @GSResule nvarchare(1000)
    set @a=3,
    set @b=4,
    select @GSResule='select gs from test where gs > @a and gs< @b' 
    exec sp_executesql @GSResule, N'@a int,@b int',@a,@b
    如要取返回值,加output