0

当我在 SQL Fiddle 中运行此查询时,它运行完美:

;with cte as 
(SELECT 
 analysisvalue.analysisid, 
 heatname, 
 analysistime, 
 sampletype,
 grade, 
 productid, 
 element, 
 value 
 FROM 
 dbo.AnalysisValue 
 INNER JOIN 
 dbo.CAnalysis 
 ON 
 dbo.AnalysisValue.AnalysisID = dbo.CAnalysis.AnalysisID
 WHERE 
 heatname = 'A7M0066' 
 )
 SELECT 
      * 
 FROM 
 S_analysis s
 CROSS JOIN (SELECT TOP 1 analysistime
 FROM cte
 ORDER BY analysisid desc
 ) c
 WHERE s.heat_no = 'A7M0066' OR
 (s.analysis_datetime BETWEEN c.analysistime AND DATEADD(hh, 2, c.analysistime ))

但是,当我在 SQL Server 2012 中运行它时,我收到带有前导分号的错误:

Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near ';'.

没有分号时出现此错误:

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'with'.
4

1 回答 1

0

Instead of a CTE, you could use a #temp table and see if the query is valid:

SELECT 
analysisvalue.analysisid, 
heatname, 
analysistime, 
sampletype,
grade, 
productid, 
element, 
value 
INTO #temptable
FROM 
dbo.AnalysisValue 
INNER JOIN 
dbo.CAnalysis 
ON 
dbo.AnalysisValue.AnalysisID = dbo.CAnalysis.AnalysisID
WHERE 
heatname = 'A7M0066';

SELECT * 
FROM 
S_analysis s
CROSS JOIN (SELECT TOP 1 analysistime
FROM #temptable
ORDER BY analysisid desc
) c
WHERE s.heat_no = 'A7M0066' OR
(s.analysis_datetime BETWEEN c.analysistime AND DATEADD(hh, 2, c.analysistime ))
于 2013-04-25T15:47:37.527 回答