如何将含动态表名的EXEC执行结果存入datetime类型变量
动态SQL查询结果赋值给datetime变量的正确实现
你原写法报错的核心原因是EXEC()的返回值为整数类型的SQL执行状态码,无法直接返回查询结果集中的内容赋值给datetime类型变量。正确方案是使用sp_executesql系统存储过程配合输出参数实现取值,完整可运行代码如下:
DECLARE @F VARCHAR(50) = REPLACE('H-10','-',''); DECLARE @SQLQuery AS NVARCHAR(500) DECLARE @SOR_time datetime -- 构造动态SQL,声明内部输出参数占位 SET @SQLQuery = N' SELECT TOP 1 @InnerTime = DATEADD(MINUTE, -330, time_stamp) FROM DMD_'+@F+'_DC_data ORDER BY time_stamp ASC' -- 调用sp_executesql完成参数映射与结果返回 EXEC sp_executesql @SQLQuery, N'@InnerTime DATETIME OUTPUT', -- 定义动态SQL内部参数的类型、属性 @InnerTime = @SOR_time OUTPUT -- 将内部输出参数绑定到外部的目标变量 -- 验证取值结果,可根据业务需求使用@SOR_time SELECT @SOR_time AS SOR_time
注意事项
- 若动态SQL执行的查询无匹配数据,
@SOR_time最终值为NULL,可根据业务需要额外增加判空或默认值赋值逻辑 - 动态拼接表名时建议额外做合法性校验,避免SQL注入风险
内容的提问来源于stack exchange,提问作者tejas
相关产品推荐
相关产品推荐

