首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将日期参数传递给OPENROWSET

将日期参数传递给OPENROWSET
EN

Stack Overflow用户
提问于 2015-01-12 14:59:12
回答 2查看 1K关注 0票数 1

在尝试将参数传递给T OPENROWSET命令时,我遇到了一个问题。我一直在犯错误

将字符串转换为小时间数据类型时,转换失败

当我不使用SELECT * FROM OPENROWSET命令直接运行EXEC @laborquery时,它可以工作。我认为这是在传递@lastModifiedBeginDate@lastModifiedEndDate参数时的某种语法错误。

timesheet_date字段--我是SELECT --是一个char(10)字段,我没有办法改变这个字段。

代码语言:javascript
复制
DECLARE @lastModifiedBeginDate smalldatetime = 2014-12-01
DECLARE @lastModifiedEndDate  smalldatetime = getdate()
DECLARE @laborquery varchar(max)

SET @laborquery ='SELECT * FROM OPENROWSET(''SQLNCLI'', 
                                           ''Server=zzz;Database=yyy;Trusted_Connection=yes;Integrated_Security=SSPI'', 
    ''SELECT 
        a.company_code AS company_code, 
        a.employee_or_equipment_id AS employee_or_equipment_id, 
        a.timesheet_date as timesheet_date, 
    FROM  Allocated_Time a   
    INNER JOIN Company_Location b 
    ON B.company_code = A.company_code 
    WHERE work_unit_Id 
        IN (''10051862'',   ''10051863'',   ''10051868'',   ''10051959'', ''10051979'', ''10080220'')  
      AND CAST(timesheet_date AS smalldatetime) BETWEEN ' +  @lastModifiedBeginDate + ' AND ' +  @lastModifiedEndDate +  ' AND B.location=1'')'
EXEC @laborquery
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-12 15:01:27

只需在Parenthesis中的@laborquery中添加exec

代码语言:javascript
复制
EXEC (@laborquery)

您需要添加更多的quotes并将变量转换为varchar

代码语言:javascript
复制
SET @laborquery ='SELECT * FROM OPENROWSET(''SQLNCLI'', ''Server=zzz;Database=yyy;Trusted_Connection=yes;Integrated_Security=SSPI'', ''SELECT 
    a.company_code AS company_code, 
    a.employee_or_equipment_id AS employee_or_equipment_id, 
    a.timesheet_date as timesheet_date, 
    FROM  Allocated_Time a   
    INNER JOIN Company_Location b 
    ON B.company_code = A.company_code 
    WHERE work_unit_Id 
    IN (10051862,   10051863,   10051868,   10051959, 10051979, 10080220)  
    AND CAST(timesheet_date AS smalldatetime) BETWEEN ''''' +  
    convert(varchar(30),@lastModifiedBeginDate) + ''''' AND ''''' +  
    convert(varchar(30),@lastModifiedEndDate ) +  ''''' AND B.location=1'')'
票数 1
EN

Stack Overflow用户

发布于 2015-01-12 15:35:58

最后一个谜题的答案是,2014-12-01不是一个日期常数。它实际上是一个包含整数的和,2014 - 12 -1= 2001。2001年是1905年6月25日的内部价值。将单引号放在日期常量周围。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27904855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档