经典 ASP 与 MySQL UNION
Classic ASP with MySQL UNION
我有 table 的推荐信。有些标记为内部,有些标记为外部。我想要做的是生成一个记录集,输出所有内部记录,然后输出 5 个外部记录,这些记录集是随机排序的。我直接在我的数据库中成功构建了 SQL,它 returns 正是我想要的。它看起来像这样:
(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 语句完全可以正常工作,但当我尝试时它会崩溃输出文本。 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
(哪个错误)是一个可以为 null 的 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
对行进行重复数据删除(使用临时的 table 动态),UNION ALL
不会。既然不需要去重,那么用Union All应该就OK了。
为什么有效?我只能推测。
在重复数据删除过程中(或之后),数据可能会损坏并成为无法在客户端处理的内容(ODBC 的 OLEDB 提供程序 (MSDASQL) 位于 ASP 和 MySQL ODBC 驱动程序)。
我有 table 的推荐信。有些标记为内部,有些标记为外部。我想要做的是生成一个记录集,输出所有内部记录,然后输出 5 个外部记录,这些记录集是随机排序的。我直接在我的数据库中成功构建了 SQL,它 returns 正是我想要的。它看起来像这样:
(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 语句完全可以正常工作,但当我尝试时它会崩溃输出文本。 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
(哪个错误)是一个可以为 null 的 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
对行进行重复数据删除(使用临时的 table 动态),UNION ALL
不会。既然不需要去重,那么用Union All应该就OK了。
为什么有效?我只能推测。
在重复数据删除过程中(或之后),数据可能会损坏并成为无法在客户端处理的内容(ODBC 的 OLEDB 提供程序 (MSDASQL) 位于 ASP 和 MySQL ODBC 驱动程序)。