- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建并填充一个本地临时表,它现在运行良好,但之后我无法通过预查询访问该表及其内容。
问题的一个非常简化的版本,它已经重现了问题(C++0x with Qt5 framework):
// fyi: this constructor overload already executes the given query string
QSqlQuery query1("IF EXISTS(SELECT * FROM SYSOBJECTS WHERE ID=OBJECT_ID('#tmp') AND XTYPE='U') DROP TABLE #tmp", _db);
QSqlQuery query2("SELECT * INTO #tmp FROM mytable WHERE 1 = 0", _db);
// so far, so good: the table gets dropped if it was already existing and gets recreated with the schema of 'mytable'; it is empty due to the '1 = 0'
// this works: some code for inserting data
QSqlQuery query3("INSERT INTO #tmp SELECT mytable WHERE ...", _db);
// this also works: i can select some data
QSqlQuery query4("SELECT count(*) FROM #tmp WHERE col = 1234", _db);
Q_ASSERT(query4.hasNext());
// fails at exec() with error: "unkown object name '#tmp'"
QSqlQuery query5(_db);
query5.prepare("SELECT count(*) FROM #tmp WHERE col = :boundVar");
query5.bindValue(":boundVar", 1234);
query5.exec();
我在这里错过了什么?在我在 SQL Server documentation 中阅读此内容之前,我已经很难让创建临时表的查询运行。 :
In SQL Server 2005, the prepared statements cannot be used to create temporary objects [...], such as temporary tables. These procedures must be executed directly.
这已经很令人困惑了,因为我使用的是 SQL Server 2008r2 - 而为 Server 2012 编写的文档只提到了 2005 版本和更早的版本。尽管如此,我尝试在没有准备的情况下执行创建表的查询并且它有效(参见代码示例)。然而,引用并没有说明任何关于访问临时表的内容。
由于性能原因,我必须使用本地临时表:相当大的数据集将被过滤和转换并插入到临时表中,其中大约 10 个查询将遵循并使用这个具体化的中间数据。 TVP 不是一个好的选择,因为它会大大减慢以下查询的速度。在我的案例中,创建临时表的开销确实得到了好几倍的返回。此外,本地临时表比其他解决方案更受青睐,因为它们与其他连接隔离并且在断开连接后将被清理,这正是我想要的。
有很多原因导致我不能没有准备好的语句来读取表格,所以我真的希望有人能帮助我解决这个问题。
如何使用准备好的查询从我的本地临时表(当然是从创建它的同一连接中)读取数据?
非常感谢任何想法/解决方案!
最佳答案
如何将所有这些放在一个存储过程中,存储过程会创建一个以日期和时间以及用户 ID 为前缀的真实表。
大概是这样
创建表 someuser_190320151830....
如上构建动态sql语句填充表
从表中选择任何内容,以便您的应用可以使用它
删除表 someuser_190320151830
最后一步可能是选择数据然后删除表格。
除非同一个人设法在同一时间运行它,否则它可能会起作用。我曾使用过类似的方法,但它很少运行。
关于c++ - 微软 SQL 服务器 : Access a local temporary table in a prepared statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29150597/
我是一名优秀的程序员,十分优秀!