我在使用PDO和SqlSrv连接时遇到困难,该连接使用公用表表达式来创建内存表,该表由应该生成查询输出的查询引用。关于这个问题的更多内容可以在我今天早些时候发布的一个问题中阅读:the question。
说我有这个问题:
-- app.use("Dummy Foo Bar Baz table")
/**
* The above line is a custom made syntax that lets me include
* common SQL parts I need often in different queries.
*/
select * from @table
使用preg_match_all
我搜索所有-- app.use("(.*)")
次使用情况。在后台,这只是检查具有给定名称的名称列的预定义查询的表,并将该SQL包含在要执行的查询中。在这种情况下,“Dummy Foo Bar Baz表”的SQL是:
declare @table table(id int, name varchar(255))
insert into @table values (1, 'foo')
insert into @table values (2, 'bar')
insert into @table values (3, 'baz')
触发到SQL Server数据库的完整查询是:
declare @table table(id int, name varchar(255))
insert into @table values (1, 'foo')
insert into @table values (2, 'bar')
insert into @table values (3, 'baz')
select * from @table
当我运行此操作时,出现The active result for the query contains no fields
错误。该查询在SQL Server Management Studio中运行正常。我相信这是因为SSMS在内部处理或保存CTE结果在内存中而PDO不支持这一点,或者至少忽略了暂时执行此操作。
从上述查询中获取结果的替代方法
所以我想知道是否有可能将其分解,而不是重建SQL解释器,而是执行所有app.use(..)
并将它们存储在内存中(或者存放在它所在的位置,以便我可以引用它)并将它们用于“最终”查询select * from @table
。
我查询的数据库用户具有只读访问权限(并且无法更改权限),因此存储过程不是解决方案。
可以这样做吗?