在尝试将参数传递给T OPENROWSET命令时,我遇到了一个问题。我一直在犯错误
将字符串转换为小时间数据类型时,转换失败
当我不使用SELECT * FROM OPENROWSET命令直接运行EXEC @laborquery时,它可以工作。我认为这是在传递@lastModifiedBeginDate和@lastModifiedEndDate参数时的某种语法错误。
timesheet_date字段--我是SELECT --是一个char(10)字段,我没有办法改变这个字段。
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发布于 2015-01-12 15:01:27
只需在Parenthesis中的@laborquery中添加exec
EXEC (@laborquery)您需要添加更多的quotes并将变量转换为varchar
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'')'发布于 2015-01-12 15:35:58
最后一个谜题的答案是,2014-12-01不是一个日期常数。它实际上是一个包含整数的和,2014 - 12 -1= 2001。2001年是1905年6月25日的内部价值。将单引号放在日期常量周围。
https://stackoverflow.com/questions/27904855
复制相似问题