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

b4wnujal  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(292)

我想用linked server在mssql中查询mysql数据库,但是我一直得到这个错误:msg 102,level 15,state 1,procedure 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 +'''')

我得到的错误
消息102,级别15,状态1,第9行“+”附近语法不正确。
在那里之后我会把它交给一个临时的table

fjaof16o

fjaof16o1#

我做类似的事情,但不是用mysql。不过,我怀疑它也能与mysql一起工作。
而不是这样:

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

你想要这样的东西:

WHERE TDate >= ' + @frmDateString + '

哪里 @frmDateString 是此格式的字符串。
{ts'年-月-日hh:mm:ss'}
你得试试引号的数目。我做的事情也和你有点不同。我的技巧是:

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

exec sp_executesql @sql;

重要的是我的方法需要更多的单引号。
同样重要的是,我使用标量函数将日期转换为格式正确的字符串。
编辑从这里开始
在发布这个答案之后,我阅读了关于存储过程的评论。你会想用我的方法。

相关问题