OPENQUERY"延期准备无法完成。"

时间:2018-03-21 12:36:25

标签: tsql openquery

我试图在链接服务器上运行OPENQUERY但没有太大成功。我有2个使用UNION运算符的查询。当它们作为普通查询运行时,它们单独运行并且一起运行。当我尝试通过打开查询运行它时,我收到以下消息。

OLE DB provider "SQLNCLI11" for linked server "IIS900011" returned message "Deferred prepare could not be completed."
Msg 8180, Level 16, State 1, Line 1
Statement(s) could not be prepared.
Msg 102, Level 15, State 1, Line 35
Incorrect syntax near 'time'.
Msg 102, Level 15, State 1, Line 13
Incorrect syntax near 'Monday'.

我的查询如下:

    SELECT *
    FROM OPENQUERY(IIS900011, 
    'select
    sysjobs.name job_name
    ,sysjobs.enabled job_enabled
    ,sysschedules.name schedule_name
,sysschedules.freq_recurrence_factor
,case
 when freq_type = 4 then ''Daily''
end frequency
,
''every '' + cast (freq_interval as varchar(3)) + '' day(s)''  Days
,
case
 when freq_subday_type = 2 then '' every '' + cast(freq_subday_interval as varchar(7)) 
 + '' seconds'' + '' starting at ''
 + stuff(stuff(RIGHT(replicate(''0'', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, '':''), 6, 0, '':'')
 when freq_subday_type = 4 then '' every '' + cast(freq_subday_interval as varchar(7)) 
 + '' minutes'' + '' starting at ''
 + stuff(stuff(RIGHT(replicate(''0'', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, '':''), 6, 0, '':'')
 when freq_subday_type = 8 then '' every '' + cast(freq_subday_interval as varchar(7)) 
 + '' hours''   + '' starting at ''
 + stuff(stuff(RIGHT(replicate(''0'', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, '':''), 6, 0, '':'')
 else '' starting at '' 
 +stuff(stuff(RIGHT(replicate(''0'', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, '':''), 6, 0, '':'')
end time

from msdb.dbo.sysjobs
inner join msdb.dbo.sysjobschedules on sysjobs.job_id = sysjobschedules.job_id
inner join msdb.dbo.sysschedules on sysjobschedules.schedule_id = sysschedules.schedule_id
where freq_type = 4')

UNION  

SELECT *
FROM OPENQUERY(IIS900011,
'select
 sysjobs.name job_name
,sysjobs.enabled job_enabled
,sysschedules.name schedule_name
,sysschedules.freq_recurrence_factor
,case
 when freq_type = 8 then ''Weekly''
end frequency
,
replace
(
 CASE WHEN freq_interval&1 = 1 THEN ''Sunday, '' ELSE '' END
+CASE WHEN freq_interval&2 = 2 THEN ''Monday, '' ELSE '' END
+CASE WHEN freq_interval&4 = 4 THEN ''Tuesday, '' ELSE '' END
+CASE WHEN freq_interval&8 = 8 THEN ''Wednesday, '' ELSE '' END
+CASE WHEN freq_interval&16 = 16 THEN ''Thursday, '' ELSE '' END
+CASE WHEN freq_interval&32 = 32 THEN ''Friday, '' ELSE '' END
+CASE WHEN freq_interval&64 = 64 THEN ''Saturday, '' ELSE '' END
,'', ''
,''
) Days
,
case
 when freq_subday_type = 2 then '' every '' + cast(freq_subday_interval as varchar(7)) 
 + '' seconds'' + '' starting at ''
 + stuff(stuff(RIGHT(replicate(''0'', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, '':''), 6, 0, '':'') 
 when freq_subday_type = 4 then '' every '' + cast(freq_subday_interval as varchar(7)) 
 + '' minutes'' + '' starting at ''
 + stuff(stuff(RIGHT(replicate(''0'', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, '':''), 6, 0, '':'')
 when freq_subday_type = 8 then '' every '' + cast(freq_subday_interval as varchar(7)) 
 + '' hours''   + '' starting at ''
 + stuff(stuff(RIGHT(replicate(''0'', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, '':''), 6, 0, '':'')
 else '' starting at '' 
 + stuff(stuff(RIGHT(replicate(''0'', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, '':''), 6, 0, '':'')
end time

from msdb.dbo.sysjobs
inner join msdb.dbo.sysjobschedules on sysjobs.job_id = sysjobschedules.job_id
inner join msdb.dbo.sysschedules on sysjobschedules.schedule_id = sysschedules.schedule_id
where freq_type = 8
order by job_enabled desc')

我认为我有一点大脑融化,因为我无法看到语法错误在哪里,或者它确实是一个红色的鲱鱼。我之前没有使用过openquery,所以我可能错过了很明显的东西。 编辑:我错过了一些标点符号。想想我现在排序。

CASE WHEN freq_interval&1 = 1 THEN ''Sunday, '' ELSE '''' END
+CASE WHEN freq_interval&2 = 2 THEN ''Monday, '' ELSE '''' END
+CASE WHEN freq_interval&4 = 4 THEN ''Tuesday, '' ELSE '''' END
+CASE WHEN freq_interval&8 = 8 THEN ''Wednesday, '' ELSE '''' END
+CASE WHEN freq_interval&16 = 16 THEN ''Thursday, '' ELSE '''' END
+CASE WHEN freq_interval&32 = 32 THEN ''Friday, '' ELSE '''' END
+CASE WHEN freq_interval&64 = 64 THEN ''Saturday, '' ELSE '''' END

0 个答案:

没有答案