5,941
社区成员
发帖
与我相关
我的任务
分享使用fdbatchmove的sql,导入excel表到mssql表,在写read语句时,里面所用到的函数遵循什么规则?
我试了试,既不是sql规则,也不是vba规则,还不是delphi规则,有点蒙。
比如TAB键值要使用chr(9)使用char(9)就错误,可以使用trim而ltrim就提示错误,可以使用replace而使用sunstring就错误。
好像sql+vba+delphi合集里挑挑拣拣的几个函数可以使用。
有知道的大佬指点一下吗?
结贴:使用acess驱动2010就行
测试了很多次,对FDbatchmove有了一点点的认识:
1、FDBatchMoveSQLReader1.ReadSQL。read excel表,如果在这里写规则,可以使用trim()chr(),且必须FDBatchMove1.Options - [poSkipUnmatchedDestFields],否则系统认为找不到字段名,而且你用 AS 字段名,就提示错误。
2、FDBatchMoveSQLWriter1.WriteSQL。write masql table,规则最好是写在这里 函数(:变量),不易出错,且符合mssql的内置函数使用规则ltrim()char()。
以上两句使用sql的规则完全不同,真是懵逼。
update 表 set 名称=:名称 where 工资编号=right(''00'' + :工资编号,4)
这样就可以,惊奇不惊奇,我去
是不是我对标准SQL理解不到位:excel-->mssql中,excel表中的工资编号为17,mssql中为0017,为了使用sql的dmupdate:
能显示正确的0017。但在FDbatchmove中使用sql语句
FDBatchMoveSQLReader1.ReadSQL :='select right(''000''+cast(工资编号 as nvarchar),4) from [Sheet1$];
就提示语法错误 (操作符丢失) 在查询表达式 'right('000'+cast(工资编号 as nvarchar),4)' 中错误
我在sql中测试:select right('000'+cast(工资编号 as nvarchar),4) from OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=Yes;IMEX=1;Database=D:\test.xlsx', 'select * from [Sheet1$]') 就没有问题。
试过了concat,&,CONVERT,+等均不得要领,懵逼中
请大佬指教!
chr()、trim()、replace()是标准SQL的内置函数,char()、ltrim()、substring()是ms sql server的非标准函数~