【问题标题】:Incorrect syntax in query which is loading data into excel file将数据加载到 excel 文件中的查询语法不正确
【发布时间】:2014-05-20 20:41:24
【问题描述】:

我有我查询正在写入 excel 文件。

查询看起来像这样

EXEC sp_makewebtask @outputfile = 'e:\Testing.xls',
   @query = '  SELECT top 10 *
               FROM [myDB].[dbo].[TOTALS_DAY]
               WHERE [START_DATETIME] < '20140501'', 
   @FixedFont=0, 
   @lastupdated=0, 
   @resultstitle = 'Testing details'

如果我注释掉它生成的 where 子句,但是我必须使用 date 并且当我指定 date 时它会抛出错误。

消息 102,第 15 级,状态 1,第 5 行
'20140501' 附近的语法不正确。

如何解决这个问题?

【问题讨论】:

    标签: sql excel sql-server-2008-r2


    【解决方案1】:

    你已经写了 2 '',试试这个:

    编辑

    DECLARE  @date DATETIME 
    set @date = '20140501'
    EXEC sp_makewebtask @outputfile = 'e:\Testing.xls',
     @query = '  SELECT top 10 *
       FROM [myDB].[dbo].[TOTALS_DAY]
       where [START_DATETIME] < @date, 
       @FixedFont=0, 
       @lastupdated=0, 
       @resultstitle='Testing details'
    

    希望对你有帮助

    【讨论】:

    • 我必须在日期之后有额外的',这就是问题
    • 也许用你的日期声明一个@date变量,然后再比较这个变量
    • 如果您设置了DATETIME 值,您应该使用正确 ISO-8601 格式,即YYYYMMDD没有任何破折号! ) 绝对独立于语言设置。带有破折号的版本可能会失败,具体取决于您的语言设置。所以使用set @date = '20140501' 而不是你所拥有的
    【解决方案2】:

    您似乎有无意匹配的引号。由于您将 SQL 语句用单引号括起来,因此查询被解释为

    '  SELECT top 10 *
    FROM [myDB].[dbo].[TOTALS_DAY]
    where [START_DATETIME] < '
    

    这意味着什么。由于日期应该用单引号引起来,是否可以将 @query 的值放在双引号中?像这样:

    EXEC sp_makewebtask @outputfile = 'e:\Testing.xls',
     @query = "  SELECT top 10 *
       FROM [myDB].[dbo].[TOTALS_DAY]
       where [START_DATETIME] < '20140501'", 
       @FixedFont=0, 
       @lastupdated=0, 
       @resultstitle='Testing details'
    

    【讨论】:

    • 它不喜欢双引号 :(
    【解决方案3】:

    还有额外的单引号试试:

    EXEC sp_makewebtask @outputfile = 'e:\Testing.xls',
     @query = '  SELECT top 10 *
       FROM [myDB].[dbo].[TOTALS_DAY]
       where [START_DATETIME] < '20140501', 
       @FixedFont=0, 
       @lastupdated=0, 
       @resultstitle='Testing details'
    

    【讨论】:

    • 我必须拥有它,因为如果我删除它,它会关闭 select 语句,它会抛出 Msg 102, Level 15, State 1, Line 4 Incorrect syntax near '20140501'. 错误
    【解决方案4】:

    我这样做的方式不同,因为使用日期时间格式声明变量对我不起作用,我找到了解决方法并这样做了

    EXEC sp_makewebtask @outputfile = 'e:\VT_TOTALS_DAY_en_US.xls', @query = 'SELECT * from FROM [myDB].[dbo].[TOTALS_DAY] where [START_DATETIME] < DATEADD(DAY, -20, GETDATE())', @lastupdated=0, @resultstitle='Testing details'

    必须使用DATEADD(DAY, -20, GETDATE()) 才能获得 2014-05-01

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多