有关用表名作参数的问题(100分)

  • 主题发起人 主题发起人 zhj.nc
  • 开始时间 开始时间
Z

zhj.nc

Unregistered / Unconfirmed
GUEST, unregistred user!
在用表名作参数时遇到这样一个问题:
declare @TableName SysName
declare @MaxID Int
Set @TableName='t1'
当我这样写:
Exec ('Set @MaxID=(Select Max(Id) From '+@TableName+')')
告诉我@MaxID未定义。用另一种方法写
Exec ('Set '+@MaxID+'=(Select Max(Id) From '+@TableName+')')
又告诉我“'=' 附近有语法错误。”
问题的关键是,当用表名作参数时,如何付值。
 
定义时不要加@
 
To C139:
在SQL Server中,定义变量前肯定要加@,我申明一下,是写SQL语句。
 
表名不能是动态的变量,用动态SQL吧
 
表名不能是动态的变量,用动态SQL吧
 
set @sqlstr =
--create your own sql string
exec(@sqlstr)
@sqlstr是可以为任何可以执行的SQL语句!!连DDL都可以的(不过有一定限制!)
 
@MaxID只可定义在exec 中,在exec 内可用,在Exec外不可使用。
 
declare @TableName SysName
declare @MaxID Int
declare @sTemp nvarchar
Set @TableName='t1'
set @sTemp='Set @MaxID=(Select Max(Id) From '+@TableName +')'
Exec (@sTemp)
 
declare @TableName SysName
declare @MaxID Int
declare @sSQL nvarchar(500)
declare @sParam nvarchar(500)
Set @TableName='doctor'

set @sSQL = N'Select @MaxID= Max(no_doctor) From '+ @TableName

set @sParam = N'@MaxId int output'
Exec sp_executesql @sSQL, @sParam, @MaxId output
Select @MaxId

不好意思,改了4次才搞定,若还有问题,看sp_executesql的帮助吧
 
接受答案了.
 
后退
顶部