【问题标题】:Problem passing a datetime variable into a dynamic SQL query将日期时间变量传递到动态 SQL 查询时出现问题
【发布时间】:2020-09-15 17:18:13
【问题描述】:

我正在尝试执行动态 SQL 查询,但我收到错误消息 105, Level 15, State 1, Line 1 字符串'2020-09-15 18:'后的非闭合引号。 消息 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

【问题讨论】:

  • 要编写动态sql,您必须能够在出现问题时对其进行调试。因此,不要愤怒地退出开发,只需选择您生成的字符串,这样您就可以准确地看到您编写的代码做了什么。

标签: sql-server tsql


【解决方案1】:

您的字符串太短,超过 100 个字符。

尝试将所有内容更改为 250 甚至 300 个字符。或者更好的是,NVARCHAR(1000)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 2018-09-22
    • 1970-01-01
    • 2022-08-15
    • 2020-03-31
    • 1970-01-01
    • 2020-04-03
    相关资源
    最近更新 更多