2021-11-04 14:42:08 版本 : sql存储过程表名和字段名为变量 - rob_2010 - 博客园
作者: 周杨 于 2021年10月29日 发布在分类 / 计算机应用 / 数据库 / SQLSERVER 下,并于 2021年11月04日 编辑
 历史版本

备注 修改日期 修改人
其他原因... 2021-11-04 14:54:39[当前版本] 系统管理员
其他原因... 2021-11-04 14:42:08 系统管理员
CREAT 2021-10-29 14:15:47 系统管理员

没有使用动态语句直接报错

alter proc testpapers
as
begin
    declare @tems nvarchar(max),@zidaun nvarchar(max)
    set @tems=select * from @tems order by @zidaun 
    exec(@tems)
end
exec testpapers
消息 156,级别 15,状态 1,过程 testpapers,第 1 行
关键字 'select' 附近有语法错误。
消息 1087,级别 15,状态 2,过程 testpapers,第 1 行
必须声明表变量 "@tems"。




将表名和字段名写到exec里边

alter proc testpapers
as
begin
    declare @startRow nvarchar(max),@tems nvarchar(max),@zidaun nvarchar(max)
    set @startRow='temp'
    set @tems='select * from  ';
    set @zidaun='p_id';
    exec(@tems+@startRow+' order by '+@zidaun)
end

exec testpapers

若是需要将执行结果赋予变量,则

declare @cnum varchar(20)
declare @sql nvarchar(1000)
select @sql=('select @a=cNumber+1 from VoucherHistory where CardNumber='''+@CardNumber+'''')
exec sp_executesql @sql,N'@a int output',@cnum output
print @cnum

历史版本-目录  [回到顶端]
    知识分享平台 -V 5.1.4 -大信谛威