日期:2014-05-18  浏览次数:20424 次

一个无厘头的SQL出错
declare @maxTime varchar(25)
select @maxTime=''''+max(CONTACTENDTIME)+'''' from T_Pub_CommonInfo

SELECT * FROM openquery(ORA8172,'SELECT * FROM ICDMAIN.T_PUB_COMMONINFO WHERE CONTACTENDTIME>'+@maxTime+' AND STAFFCITY =''05'' AND ACCEPTERNO IN (''4085'',''4086'',''4087'',''4088'',''4089'',''4090'',''4096'')')

服务器: 消息 170,级别 15,状态 1,行 9
第 9 行: '+' 附近有语法错误。


各路高手,请帮忙解决一下,语法哪里错了,谢谢。

------解决方案--------------------
declare @str varchar(2000)

set @str='SELECT * FROM ICDMAIN.T_PUB_COMMONINFO WHERE CONTACTENDTIME>'+@maxTime+' AND STAFFCITY =''05'' AND ACCEPTERNO IN (''4085'',''4086'',''4087'',''4088'',''4089'',''4090'',''4096'')'

SELECT * FROM openquery(ORA8172,@str)
------解决方案--------------------
openquery 带参数 。。。 还是直接拼字符串吧!
------解决方案--------------------
字符串左右需要单引号
------解决方案--------------------
OPENQUERY ( linked_server ,'query' )
 

参数
linked_server 
表示链接服务器名称的标识符。

' query ' 
在链接服务器中执行的查询字符串。该字符串的最大长度为 8 KB。


OPENQUERY 不接受其参数的变量
------解决方案--------------------
declare @maxTime varchar(25)
select @maxTime=trim(max(CONTACTENDTIME)) from T_Pub_CommonInfo

SELECT * FROM openquery(ORA8172,'SELECT * FROM ICDMAIN.T_PUB_COMMONINFO 
WHERE CONTACTENDTIME>'''+@maxTime+''' AND STAFFCITY =''05'' 
AND ACCEPTERNO IN (''4085'',''4086'',''4087'',''4088'',''4089'',''4090'',''4096'')')
------解决方案--------------------
探讨
declare @maxTime varchar(25)
select @maxTime=''''+max(CONTACTENDTIME)+'''' from T_Pub_CommonInfo

SELECT * FROM openquery(ORA8172,'SELECT * FROM ICDMAIN.T_PUB_COMMONINFO WHERE CONTACTENDTIME>'+@max……