求一个sqlserver批量更新时间的存储过程,自己写的报错必须声明标量变量

ldf5588 2024-04-22 16:26:36

需求:更新某表的某时间字段,要求更新后的每条记录时间值都不相同

如下:

declare @t datetime
select @t = getdate()
Update tb Set tim=@t,@t=dateadd(ms,3,@t) where userid='aaa'

 

想改成存储过程,使用方便:

ALTER PROCEDURE [dbo].[sp_PLshuaxin] 
    @tblName nvarchar(50), --表名
    @sxName nvarchar(30), --刷新的字段名称
    @tj varchar(max)  --条件
AS
    declare @t datetime   --更新时间
    declare @strsql varchar(1000)  --执行的sql语句    
BEGIN
    SET NOCOUNT ON;
     select @t = getdate()
     set @strsql='update '+@tblName+' set '+@sxName+'='''+convert(varchar(100), @t)+''',@t=dateadd(ms,3,@t)  where '+@tj --报错,必须声明标量变量 "@t"   
     exec (@strsql ) 
END

现在的问题: 执行存储过程时报错,必须声明标量变量 "@t"  (已经声明了)

请高手赐教一下如何正确改写存储过程,谢谢

 

...全文
247 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

exec 不在当前语境中执行,不能获取当前存储过程声明的变量

22,288

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧