mysql - 带有 MySQL UNION 的经典 ASP

标签 mysql asp-classic

我有一张推荐表。有些标记为内部,有些标记为外部。我想要做的是生成一个记录集,输出所有内部记录,然后输出 5 个外部记录,这些记录集是随机排序的。我直接在我的数据库中成功构建了 SQL,它返回的正是我想要的。它看起来像这样:

(SELECT tText, tName FROM tblTestimonials WHERE tExternal = 0 ORDER BY RAND())
UNION
(SELECT tText, tName FROM tblTestimonials WHERE tExternal = 1 ORDER BY RAND() LIMIT 5)

然而,当我将它插入到我的经典 ASP 页面时,该页面使用性质非常相似的简单非 UNION SQL 语句完全正常工作,当我尝试输出 tText 时它失败了。 tName 没问题(如果我将它添加到 SELECT 语句中,它也很乐意输出 tExternal)。

我收到这个错误:

error '80020009'
Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.

tName(有效)是一个可为空的 varchar(500)

tText(哪些错误)是可为空的 varchar(8000)

看起来 UNION 正在对较大文本字段的数据类型做一些事情。我能够让它工作的唯一方法是使用:

(SELECT CONVERT(tText, CHAR(500)) AS tText, tName FROM tblTestimonials WHERE tExternal = 0 ORDER BY RAND())
UNION
(SELECT CONVERT(tText, CHAR(500)) AS tText, tName FROM tblTestimonials WHERE tExternal = 1 ORDER BY RAND() LIMIT 5)

但后来我丢失了很多数据。我只能输出不完整的评论。

如果有人对此有任何经验,我将不胜感激。

最佳答案

我以前遇到过这个问题。

如果您使用 UNION ALL 而不是 UNION,您会发现它神奇地工作。

它们之间的区别是 UNION 对行进行重复数据删除(使用动态临时表),UNION ALL 不会。由于不需要重复数据删除,因此使用 Union All 应该没问题。

为什么有效?我只能推测。

在重复数据删除过程中(或之后),数据可能会损坏并成为无法在客户端处理的内容(ODBC 的 OLEDB 提供程序 (MSDASQL) 位于 ASP 和 MySQL ODBC 驱动程序之间)。


UNION Syntax

关于mysql - 带有 MySQL UNION 的经典 ASP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42903058/

相关文章:

javascript - 无法使用 mysql 数据库中的数据以 3D 方式显示 Highcharts

php - 当用户在检查登录时输入错误信息时出现空白页面

javascript - 通过jquery ajax上传和加载图片

数据网格和经典 ASP

asp.net - 经典 ASP 中的 Server.Execute() 或 Transfer() 到 Web.config 中定义的 aspx

types - 经典 ASP 类型不匹配

php - 在 MYSQL 中操作外键输出

mysql - docker 建立 : error: ER_NOT_SUPPORTED_AUTH_MODE: MySQL client

php - 如何改进全文搜索的 mysql 查询?

javascript - 从 ASP 中的国家/地区选择中填充州/省/自治区/直辖市下拉列表