读书人

一个无厘头的SQL出错解决方案

发布时间: 2012-01-23 21:57:28 作者: rapoo

一个无厘头的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……

读书人网 >SQL Server

热点推荐