sql-server - 将日期时间变量传递到动态 SQL 查询时出现问题
问题描述
我正在尝试执行动态 SQL 查询,但在字符串 '2020-09-15 18:' 之后出现错误 Msg 105, Level 15, State 1, Line 1 Unclosed 引号。消息 102,级别 15,状态 1,第 1 行“2020-09-15 18:”附近的语法不正确
datetime 变量一定有问题。有人可以建议如何正确完成吗?
declare @paramDailyOutput nvarchar(100), @retrieveDailyVal real
declare @paramDaily float
declare @retrieveDailyID varchar(100) = 'table_53'
declare @startTime datetime, @currTime datetime = GETDATE()
set @startTime = DATEADD(hour, -1, @currTime)
set @paramDailyOutput = 'SELECT @paramDaily = max(value) - min(value) FROM ' + @retrieveDailyID + ' where read_date between ''' + convert(nvarchar(200), @startTime, 120) + ''' and ''' + convert(nvarchar(200), @currTime, 120) + ''''
exec sp_executesql @paramDailyOutput, N' @paramDaily float OUTPUT', @paramDaily = @paramDaily output
select @paramDaily
解决方案
你的字符串太短了,你要超过 100 个字符。
尝试将所有内容更改为 250 甚至 300 个字符。或者更好的是,NVARCHAR(1000)。
推荐阅读
- fortran - 使用 OpenMP 并行化包含指针数组的可分配类型的英特尔 Fortran 代码
- docker - 在 docker 容器中以 root 身份被拒绝权限
- javascript - Discord bot,如何获得所有连接的“公会/服务器”
- php - 重启PHP-FPM时出现403错误如何解决?
- javascript - 对循环感到困惑 - 欢迎任何帮助
- html - 反应 + CSS 网格 + MongoDB?
- php - Codeigniter 查询不返回我选择的行
- visual-studio-code - 在 VSCode 中切换工作区,无需每次都重新加载
- c++ - 迭代期间添加到 std::unordered_set(或 unordered_map)中的元素是否会在迭代期间被访问?
- javascript - element.count & element.value 在数组中是什么意思?