CREATE PROCEDURE [dbo].[Table_Back]
@Table_Name varchar(20)
As
Begin
Declare @DocumentID varchar(30)
Declare @sql nvarchar(500)
set @sql='select  @DocumentID=DocumentID from '+@Table_Name+' where id=1'
exec(@sql)
select * from JJGovOA.dbo.Office_Send where DocumentID=@DocumentID
End
GO
有这样一个存储过程,我要把查询的结果赋值给变量@DocumentID,为什么@DocumentID为null呢?记录中是有这么一件记录的.我要如何得到这条记录的DocumentID 字段的值呢?上面存储过程执行出现"必须声明变量 '@DocumentID'。"的错误.为什么呢?

解决方案 »

  1.   

    你写到@sql 里面的 @DocumentID
    除非你把整个的定义都放到 @sql 里面
    否则它是不会认你外面declare 的哪个变量的 .除非你把@DocumentID的定义整个都放到@sql 里面....但是这样的话 你@DocumentID这个变量就不能用在外面了...
    select @sql='select * from JJGovOA.dbo.Office_Send where DocumentID=
    (select DocumentID from  '+@Table_Name+ 'where id=1)'你完全可以写在一起 不用@DocumentID这个变量撒
      

  2.   

    use sp_executesqlCREATE PROCEDURE [dbo].[Table_Back]
    @Table_Name varchar(20)
    As
    Begin
    Declare @DocumentID varchar(30)
    Declare @sql nvarchar(500)
    set @sql= 'select  @DocumentID=DocumentID from ' + @Table_Name + ' where id=1'
    exec sp_executesql @sql, N'@DocumentID varchar(30) OUTPUT', 
     @DocumentID = @DocumentID OUTPUTselect * from JJGovOA.dbo.Office_Send where DocumentID=@DocumentID 
    End
      

  3.   


    CREATE PROCEDURE [dbo].[Table_Back]
    @Table_Name varchar(20)
    As
    Begin
    Declare @DocumentID varchar(30)
    Declare @sql nvarchar(1000)
    set @sql= 'select  @DocumID=DocumentID from ' + @Table_Name + ' where id=1'
    exec sp_executesql @sql, N'@DocumIDvarchar(50) OUTPUT', @DocumentID OUTPUTselect * from JJGovOA..Office_Send where DocumentID=@DocumentID 
    End