php - sqlserver语法错误的表格式
问题描述
我正在使用 Laravel 查询生成器从 sqlsrv 数据库中获取一些数据。我要找的桌子是dbo.[Reukema Blocq Maneschijn BV$Time Slot (Weighbridge)]
. 不是我的选择。该数据库由另一家公司开发。
General error: 20018 Invalid object name
执行查询时,我不断收到错误消息。我仔细检查了名称是否有错别字,但我找不到。
我确实发现编译查询时出现问题。这是我测试问题的代码:
$query = $connection->query()
->from('Reukema Blocq Maneschijn BV$Time Slot (Weighbridge)')
->toSql()
当我转储 时$query
,我得到以下信息:
string(67) "select * from [Reukema Blocq Maneschijn BV$Time Slot ](Weighbridge)"
这里]
是错误的地方。
这个问题一直存在,即使我使用了raw()
帮助器:
$query = $connection->query()
->from($connection->raw('dbo.[Reukema Blocq Maneschijn BV$Time Slot (Weighbridge)]'))
->toSql()
即使在最后一个示例中,]
从字符串末尾移动到(
.
为什么是这样?我是否缺少编译 sqlsrv 查询的重要规则/机制?
以下代码确实有效。这让我觉得特别奇怪:
$connection->select('select [Time Slot] as [id] from [Reukema Blocq Maneschijn BV$Time Slot (Weighbridge)]');
所以我认为SqlServerGrammar@compileFrom
方法有问题。Laravel 为什么要这样编译?
解决方案
就个人而言,我强烈建议更改对象的名称;这是一个糟糕的选择。如果你不能这样做,也许创建一个更“可用”的同义词。例如:
CREATE SYNONYM dbo.WeighbridgeSlot FOR dbo.[Reukema Blocq Maneschijn BV$Time Slot (Weighbridge)];
然后在您的应用程序代码中调用同义词:
$query = $connection->query()
->from('WeighbridgeSlot')
->toSql()
推荐阅读
- php - Laravel - SQLSTATE [42S22]:找不到列:1054 未知列'categories.blog_id
- python - 如何在pyqt5上缩放使用QPixmap实现的图片
- swift - Swift:弹出通知权限影响类功能
- google-chrome-extension - 为 Chrome 扩展使用 OAuth 需要同意吗?
- c# - 使加载有 LoadLibrary 的 DLL 在前台显示其窗口
- c++ - _BitScanForward64 找不到
- c# - 如何通过 Unity 使用 WebGL/C# 在新选项卡上打开链接?
- discord.js - 兑换命令 (discord.js)
- python-3.x - 我目前正在尝试创建一个基于变量命名的字典
- amazon-web-services - S3 是否提供任何存储桶策略以在有限的时间内将对象共享给 IAM 用户?