找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
问题
取消精华
首页精华问答
取消推荐
高端用户推荐
申请置评
已申请置评
修改
修改标签
添加标签
官方认证
取消官方认证
修改标签
添加标签
转移分类
删除
{{itemCategory}}
早期的7.4版本审计追踪数据库只有一个数据库名称,查询没有问题,现在7.5开始,审计追踪数据库有多个分段,可能解决了数据库太大的问题,数据库名字会定期变动,不固定,前缀是一致的,后面会有日期,如何来查询呢,Initial Catalog 这个名称不知道什么写了。应该是查询语句要修改了。
查询要求:查询数据库包含某个字段的所有数据库中表的数据
现在要求能够查询到数据库名字中包含“ABC”字段的所有数据库的数据。
固定查询某个数据库没有问题的:查询语句如下。
'连接数据库
strcn="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=ABC_IPC43_Audit_20250529003706_20250530003707;Data Source=IPC43\WINCC"
'使用命令文本查询
sql="select * from CL_TRAILDATA where DateTime between '"&BeginDate&"' and '"&EndDate&"' order by DateTime"
收藏({{answerDetail.Q_FavoriteCounts}})
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
专家建议
取消最佳答案
修改
你这个问题很好,你的目标是获取所有符合条件的数据库名称,那么你参考下面的实例,看看能不能有什么启发
' 连接SQL Server主数据库
strMasterCn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=master;Data Source=IPC43\WINCC"
Set objMasterConn = CreateObject("ADODB.Connection")
objMasterConn.Open strMasterCn
' 查询所有名称包含"ABC"的数据库
sqlGetDbs = "SELECT name FROM sys.databases WHERE name LIKE 'ABC%' ORDER BY name DESC"
Set objRsDbs = CreateObject("ADODB.Recordset")
objRsDbs.Open sqlGetDbs, objMasterConn
' 存储找到的数据库名称
Dim arrDatabases()
ReDim arrDatabases(-1) ' 初始化为空数组
Do Until objRsDbs.EOF
ReDim Preserve arrDatabases(UBound(arrDatabases) + 1)
arrDatabases(UBound(arrDatabases)) = objRsDbs("name")
objRsDbs.MoveNext
Loop
objRsDbs.Close
objMasterConn.Close
依次查询每个数据库
' 定义查询结果数组
Dim arrAllResults()
ReDim arrAllResults(-1)
' 遍历所有找到的数据库
For Each dbName In arrDatabases
On Error Resume Next ' 防止某个数据库查询失败导致脚本中断
' 连接当前数据库
strCn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=" & dbName & ";Data Source=IPC43\WINCC"
Set objConn = CreateObject("ADODB.Connection")
objConn.Open strCn
If Err.Number = 0 Then ' 连接成功
' 查询当前数据库
sql = "SELECT * FROM CL_TRAILDATA WHERE DateTime BETWEEN '" & BeginDate & "' AND '" & EndDate & "' ORDER BY DateTime"
Set objRs = CreateObject("ADODB.Recordset")
objRs.Open sql, objConn
' 将结果合并到总结果中
Do Until objRs.EOF
ReDim Preserve arrAllResults(UBound(arrAllResults) + 1)
Set arrAllResults(UBound(arrAllResults)) = objRs.GetRows(1) ' 获取当前行
objRs.MoveNext
Loop
objRs.Close
objConn.Close
End If
On Error GoTo 0 ' 恢复错误处理
Next
这样应该就可以满足你的需求了。。你需要根据实际的情况进行修改测试。。
希望可以帮到你,记得给个好评。。
等您来回答
换一换
{{item.CoinValue}}西币
{{item.VisitNum}}人想问
本版相关问题
换一换
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!

西门子商城