使用链接SQL(Oracle)在SQL Server 2005/2008上运行以下SQL查询,我收到错误消息。
Declare @PriorMonth_StartDate Datetime
Declare @PriorMonth_EndDate Datetime
Set @PriorMonth_StartDate = '2012-03-01'
Set @PriorMonth_EndDate = '2013-10-31'
EXEC('
SELECT *
INTO #C_INFO
FROM OPENQUERY(ORACLE_CMIDW1,''
SELECT A.CID, A.ANO, A.COMP_REVD_DATE, A.REVIEW_COMP_DATE,
A.ISSUE, B.ENT_ID, A.TYPE
FROM XXX B
INNER JOIN YYY A ON B.ANO = A.ANO WHERE A.REVIEW_COMP_DATE Between ''' +
@PriorMonth_StartDate + ''' And ''' + @PriorMonth_EndDate
+ ''' AND Not A.ISSUE = 110 AND A.TYPE = 1 and B.ENT_ID In (2,3)
'')')
以下是错误消息:
Msg 102, Level 15, State 1, Line 9
Incorrect syntax near 'Mar'.
问题:错误消息和SQL查询之间有任何关联吗?看起来SQL正在阅读日期为2013年3月1日或其他什么。如果是这种情况,它就不起作用,因为Oracle以不同的格式使用它。
答案 0 :(得分:2)
错误在您的查询构造中。我们来看看你的报价吧。两个单引号在字符串中引用EXEC
。因此,在ORACLE_CMIDW1之后,您启动要发送给Oracle的字符串。在BETWEEN
之后,您使用另外两个单引号结束字符串。因此,您为EXEC
实际构建的字符串如下所示:
SELECT *
INTO #C_INFO
FROM OPENQUERY(ORACLE_CMIDW1,'
SELECT A.CID, A.ANO, A.COMP_REVD_DATE, A.REVIEW_COMP_DATE,
A.ISSUE, B.ENT_ID, A.TYPE
FROM XXX B
INNER JOIN YYY A ON B.ANO = A.ANO WHERE A.REVIEW_COMP_DATE Between 'MAR 1, 2012' And 'MAR 5, 2013' AND Not A.ISSUE = 110 AND A.TYPE = 1 and B.ENT_ID In (2,3) ')
从代码着色中应该相当清楚你的字符串在你想要它之前终止了。您应该使用更多单引号来转义引号,例如:
INNER JOIN YYY A ON B.ANO = A.ANO WHERE A.REVIEW_COMP_DATE Between ''''' +