任务:执行传呼的数据库中记录适用于不同的RDBMS。方法应该为主流引擎-MSSQL2000+、Oracle、MySql,等等。

请不要发布RDBMS具体的解决方案,我知道如何实施这对于大多数的现代化数据库引擎。我在寻找普遍解决方案。只是暂时的表为基础的解决方案来我的心的时刻。

编辑:
我在寻找SQL的解决方案,而不是第3个方图书馆。

有帮助吗?

解决方案

会有一个普遍解决方案,如果SQL规格包括了寻作为标准。要求对任何RDBMS语言可以被称为RDBMS语言不包括呼支持。

许多数据库产品的支持SQL与专有的扩展标准语言。他们中的一些支持寻呼喜欢MySQL的限制条款,Rowid用Oracle;每个不同的方式处理。其他DBMS的将需要添加一段,称为rowid或者类似的东西。

我不认为你可以有一个普遍适用的解决办法(任何人都是免费的,证明我错了这里;开辩论)除非它是建立进入数据库系统本身或除非有一个公司说,ABC,使用Oracle,MySQL SQL服务器和决定的所有各种数据库系统提供它们自己实施的呼通过其数据库的开发提供了一个普遍接口,用于代码使用。

其他提示

最自然的和有效的方式来做呼使用限制/偏移(上Sybase世界)的构建。一DBindependent的方式必须知道它的引擎运行和应用适当的SQL结构。

至少,那是我已经看到了它在DB独立图书馆的代码。你可以抽象离的寻呼逻辑一旦你得到的数据来自发动机的具体查询。

如果您真正地正在寻找一个单一的,一SQL句子解决方案,你可以显示你有什么想法?像SQL的临时表格的解决方案。这可能会得到你更多的相关建议。

编辑:

我想看看你在想什么,因为我看不到的方式来做到这一临时表格和不使用一个引擎具体构造。你使用的特定结构中的例子。我仍然看不到的方式来实现寻呼数据库中只有(已实施)标准SQL。你可以把整个表在标准SQL和页面应用程序,但这显然是愚蠢的。

因此,问题现在更像是"有没有办法实现寻呼没有使用限制/补偿或相当的吗?",我猜答案是"三立,没有。" 你可以尝试使用光标,但你就会堕入数据库的具体句子/行为有作为。

一个疯子(阅读愚蠢)的想法,只是发生我将被添加一个页面列表,说create table测试(int id,name varchar,电话varchar页int),然后你可以得到第1页与select*from table where页=1个。但是,这意味着要添加码,以维持该列,其中,再次只能通过将整个数据库或使用数据库的具体结构。除了具有添加一个不同的列每个可能的订货和其他许多缺陷。

我不能提供证据证明,但是我真的觉得你就不能做到这三立.

继续像往常一样:
开始通过执行它根据的标准。然后处理情况,即该DBMSes其不要实施该标准。如何处理的情况取决于你的发展环境。

你是在寻找一种"通用"办法。最普遍的方式来分是通过使用光标,但光标基于页数不适合与一个非状态的环境像一个网络应用程序。

我写了关于标准和实现(包括游标):http://troels.arvin.dk/db/rdbms/#select-limit-offset

亚音速可以为你做这个,如果你如果你可以忍受的开放源码...http://subsonicproject.com/querying/webcast-using-paging/

其他比我知道的NHib不好

访问用户可以让你做的查询类:

Query q = ...;
q.setFirstResult (0);
q.setMaxResults (10);

给你第10效果在结果设定的。

如果你想要一个DBMS独立的原SQL解决方案,我恐怕你们的运气了。所有的供应商做不同的看法。

@Vinko Vrsalovic,

因为我写了个问题我知道如何做到这一点在最DBs。我该怎么找到普遍适用的解决办法或得到证明,它并不存在。

这是一个愚蠢的解决方案的基础上的临时表格。这显然不好,所以没有必要对此发表评论。

N - upper bound
M - lower bound

create #temp (Id int identity, originalId int)

insert into #temp(originalId)
select top N KeyColumn from MyTable
where ...

select MyTable.* from MyTable
join #temp t on t.originalId = MyTable.KeyColumn
where Id between M and M
order by Id asc

drop #temp
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top