尝试在远程服务器上的查询中使用变量时出现语法错误

时间:2018-01-15 16:39:59

标签: mysql sql sql-server linked-server

我想使用链接服务器在MSSQL中查询MySql数据库但是我不断收到此错误: 消息102,级别15,状态1,过程uspGetTimeLog,第16行 ' +'。

附近的语法不正确

以下是

下面的sql代码
 SELECT * FROM  OPENQUERY([MYSQLCONN], 
        'SELECT e_id, TDate, Entry, `Exit` FROM timemgt.daymaster 
        WHERE TDate >= ''''' + @frmDate + ''''' ')

这是有效的

SELECT * FROM  OPENQUERY([MYSQLCONN], 
    'SELECT e_id, TDate, TIME_FORMAT(Entry, ''%T'') AS ''Entry'', 
    TIME_FORMAT(`Exit`, ''%T'') AS ''Exit'' FROM timemgt.daymaster 
    WHERE TDate >= ''2017-01-01'' AND TDate <= ''2017-01-01''')

这不起作用

DECLARE @frmDate VARCHAR(10)
DECLARE @toDate VARCHAR(10)
SET @frmDate = '2017-01-01'
SET @toDate = '2017-01-01'

SELECT * FROM  OPENQUERY([MYSQLCONN], 
    'SELECT e_id, TDate, TIME_FORMAT(Entry, ''%T'') AS ''Entry'', 
    TIME_FORMAT(`Exit`, ''%T'') AS ''Exit'' FROM timemgt.daymaster 
    WHERE TDate >=''' + @frmDate + ''' AND TDate <= '''+ @toDate +'''')

得到错误

  

Msg 102,Level 15,State 1,Line 9语法不正确&#39; +&#39;。

之后我将它传递给临时表

1 个答案:

答案 0 :(得分:0)

我做类似的事情,但不是MySQL。但是,我怀疑它也适用于MySQL。

而不是:

WHERE TDate >= ''''' + @frmDate + ''''' 

你想要这样的东西:

WHERE TDate >= ' + @frmDateString + ' 

其中@frmDateString是此格式的字符串。

  

{ts'yyyy-mm-dd HH:mm:ss'}

您必须尝试引号数量。我也做与你不同的事情。我的技术是:

declare @sql as nvarchar(max);
set @sql = 'select * from openquery(
SERVERNAME,
''
select etc
where SomeDateField > = ' + @dateString + '
etc
''
)
';

exec sp_executesql @sql;

重要的是我的方法需要更多的单引号。

同样重要的是我使用标量函数将我的日期转换为格式正确的字符串。

编辑从此处开始

我在发布此答案后阅读了有关存储过程的评论。你会想要使用我的方法。