日期:2014-05-18  浏览次数:20666 次

查询语句中表是一个变量时,该怎样查询?
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'。"的错误.为什么呢?

------解决方案--------------------
use sp_executesql

SQL code
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 sp_executesql @sql, N'@DocumentID varchar(30) OUTPUT', 
 @DocumentID = @DocumentID OUTPUT

select * from JJGovOA.dbo.Office_Send where DocumentID=@DocumentID 
End