一个可以带多少列是否有限制sqlcommand
在 VBA 代码中?我的代码很长,但用于确保我始终从正确的数据库中提取。 m2mdata02
将替换为代码 CatalogM2M
根据用户在数据库中的选择。要带入的总列数是 7 个表中的 23 列。
Sqlcommand = “select left(m2mdata02.dbo.jomast.fjobno,5) as job, m2mdata02.dbo.jomast.fjobno, m2mdata02.dbo.jomast.fpartno, m2mdata02.dbo.jomast.fstatus, m2mdata02.dbo.jomast.fact_rel, m2mdata02.dbo.jomast.fddue_date, m2mdata02.dbo.jomast.fprodcl, m2mdata02.dbo.jomast.frel_dt, m2mdata02.dbo.jomast.frouting, m2mdata02.dbo.inmastx.fpartno, m2mdata02.dbo.inmastx.fdescript, m2mdata02.dbo.inmastx.fprice, m2mdata02.dbo.somast.fsono, m2mdata02.dbo.somast.fcompany, m2mdata02.dbo.somast.fcustpono, m2mdata02.dbo.aritem.fcinvoice, m2mdata02.dbo.aritem.fprice, m2mdata02.dbo.aritem.fcsono, m2mdata02.dbo.armast.fcinvoice, m2mdata02.dbo.armast.finvdate, m2mdata02.dbo.shmast.fshipdate, m2mdata02.dbo.shmast.fshipno, m2mdata02.dbo.shmast.fcsono
from m2mdata02.dbo.jomast
left join m2mdata02.dbo.inmastx on m2mdata02.dbo.inmastx.fpartno = m2mdata02.dbo.jomast.fpartno
left join m2mdata02.dbo.somast on m2mdata02.dbo.somast.fsono = m2mdata02.dbo.jomast.fsono
left join m2mdata02.dbo.aritem on m2mdata02.dbo.aritem.FCSONO = m2mdata02.dbo.jomast.fsono
left join m2mdata02.dbo.armast on m2mdata02.dbo.armast.fcinvoice = m2mdata02.dbo.aritem.fcinvoice
left join m2mdata02.dbo.shmast on m2mdata02.dbo.shmast.fcsono = m2mdata02.dbo.somast.fsono
where m2mdata02.dbo.jomast.fprodcl = 'FG11' order by m2mdata02.dbo.jomast.fjobno”
最佳答案
根据MSDN docs ,String
的字数限制VBA 中的类型大约是 20 亿 (2^31) 个 Unicode 字符。您的 SQL 查询远不及该限制。如果使用 ADO 将 Excel VBA 连接到数据库,这里的服务器引擎是 SQL Server 决定列限制,23 又是不接近 maximum capacity .
但是,请考虑使用表别名来减少字符,避免重复三个句点标识符,并整体提高可读性甚至可维护性,因为您可以更轻松地为每个用户选择调整表引用。
select left(j.fjobno,5) as job
, j.fjobno
, j.fpartno
, j.fstatus
, j.fact_rel
, j.fddue_date
, j.fprodcl
, j.frel_dt
, j.frouting
, i.fpartno
, i.fdescript
, i.fprice
, so.fsono
, so.fcompany
, so.fcustpono
, ari.fcinvoice
, ari.fprice
, ari.fcsono
, arm..fcinvoice
, arm..finvdate
, sh.fshipdate
, sh.fshipno
, sh.fcsono
from m2mdata02.dbo.jomast j
left join m2mdata02.dbo.inmastx i on i.fpartno = j.fpartno
left join m2mdata02.dbo.somast so on so.fsono = j.fsono
left join m2mdata02.dbo.aritem ari on ari.FCSONO = j.fsono
left join m2mdata02.dbo.armast arm on arm..fcinvoice = ari.fcinvoice
left join m2mdata02.dbo.shmast sh on sh.fcsono = so.fsono
where j.fprodcl = 'FG11'
order by j.fjobno
顺便说一句,对于非常长的查询,避免在 VBA 中使用行连接和双引号构建字符串,并直接从格式化的 SQL 文本文件中读取:
Dim strSQL As String
' READ SQL QUERY FROM FILE
With CreateObject("Scripting.FileSystemObject")
strSQL = .OpenTextFile("C:\path\to\my\SQL\Query.sql", 1).readall
End With
' REPLACE DB IN STRING
strSQL = Replace(strSQL, "m2mdata02", "someotherdb")
关于VBA 列限制中的 SQL 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63443565/