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'。"的错误.为什么呢?
@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'。"的错误.为什么呢?
除非你把整个的定义都放到 @sql 里面
否则它是不会认你外面declare 的哪个变量的 .除非你把@DocumentID的定义整个都放到@sql 里面....但是这样的话 你@DocumentID这个变量就不能用在外面了...
select @sql='select * from JJGovOA.dbo.Office_Send where DocumentID=
(select DocumentID from '+@Table_Name+ 'where id=1)'你完全可以写在一起 不用@DocumentID这个变量撒
@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
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