比如:declare @classid int
declare @name varchar(50)
declare @sql varchar(200)set @classid = 2 --这个本来是查询结果,这里简化直接赋值。
set @sql = 'select @name = name from class' + CAST(@classid AS varchar(20)) + ' where studentid = 0'exec sp_executesql @sql
go执行结果出错:必须声明变量 '@name'。我试过定义游标的方法,也出现同样结果,应该如何解决?
谢谢!

解决方案 »

  1.   

    set @sql = 'select @name = name from class' + CAST(@classid AS varchar(20)) + ' where studentid = 0'exec sp_executesql @sql,N'@name varchar(50) output',@name varchar(50) output
      

  2.   

    对,尽量采用sp_executesql 执行,不建议过多用exec()
      

  3.   

    1搂执行结果不对啊,结果是:
    第 7 行: 'varchar' 附近有语法错误。
      

  4.   


    USE [PMSMRT1] ;       
    DECLARE @var1 varchar(50);       
    declare @sql nvarchar(200)
    set @sql = 'SELECT @tmpvar1 = AdminName
      FROM Admin
      where adminid = 5'
    exec sp_executesql @sql , N'@tmpvar1 varchar(50) output', @var1  output
    print @var1
    go
    主要是sp_executesql 的第三个参数前面已经定义类型,这里不需要(或者也不能)指定变量的类型。