存储过程中:
declare @a varchar(500)
declare @sql nvarchar(4000) 
set @sql='select @a=a from 表'
execute sp_executesql @sql出现了@a没有声明,如何解决啊!

解决方案 »

  1.   

    set @sql='select '+@a+'=a from 表'
      

  2.   

    是不是你那个@a=a的那个a应该是一个值,但是看着好象是一个变量啊,
    我刚接触存储结构,也不怎么懂,不过我这一点看不明白,是不是你@a赋值有错误
      

  3.   

    set @sql='select '+@a+'=a from 表'
      

  4.   

    declare @a varchar(500)
    declare @sql nvarchar(4000) 
    set @sql='select @a=a from 表'
    execute sp_executesql @sql,N'@a varchar(500) output',@a output
      

  5.   

    是否理解错误?declare @a varchar(500)
    declare @sql nvarchar(4000)select @a = a from 表
    set @sql = @a
    execute sp_executesql @sql
      

  6.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[up_Test]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[up_test]
    GO
    create procedure up_Test
     @aa varchar(500)as
    declare @sql nvarchar(4000) 
    set @sql='select  top 10 '+@aa+' from news '
    execute (@sql)GOup_test 'news_title'
      

  7.   

    set @sql='select '+@a+'=a from 表'
      

  8.   

    宝宝粥的显然是不可行的。我试了下declare @a varchar(500)
    select @a=actorID from Assigner
    exec (@sql)
    PRINT @a这样是可以的declare @a varchar(500)
    declare @sql nvarchar(4000) 
    set @sql=select @a=actorID from Assigner'
    exec (@sql)
    PRINT @a这样就不行了,看来包含在字符串中的SQL语句中的变量与字符串外的变量是不通用的,将其改为declare @a varchar(500)
    declare @sql nvarchar(4000) 
    set @sql='declare @a varchar(500);select @a=actorID from Assigner;PRINT @a'
    exec (@sql)就是可行的,这句在字符串外声明了@a的变量,在字符串中也声明了@a变量,但是两者并不冲突,充分说明了以上的结论“包含在字符串中的SQL语句中的变量与字符串外的变量是不通用的”,
      

  9.   

    先感谢各位:declare @a varchar(500)
    declare @b varchar(500)
    declare @sql nvarchar(4000) 
    set @sql='select @a=a,@b=b from 表 where id=1'
    execute sp_executesql @sql
    select @a,@b
    我的目的是要得到@a,@b两个值.vivianfdlpw() 的方法可行,可以得到一个值,不得如何要两个参数如何写啊
    execute sp_executesql @sql,N'@a varchar(500) output',@a output
      

  10.   


    这是一种方式,不会有错
    declare @sql nvarchar(4000) 
    set @sql='declare @a varchar(500) select @a=xh from b198'
    execute sp_executesql @sql这是一种方式
    declare @a varchar(500)
    declare @sql nvarchar(4000) exec Test1 @a output
    --这里可以得到@a的值,
    print @a
    create procedure Test1
    @a varchar(500) output
    as 
    set @a = (select top 1 xh from b198)
      

  11.   

    只要稍微改下,将@b output也加上就可以了,具体的格式在SQL联机丛书中查execute能查到