2011-06-08 92 views
5

我们RowCount设置的记录数返回或影响。但是我们需要在执行sql语句之前每次都设置它。我正在寻找一种方式来设置这个,一旦我的应用程序启动,所以它影响所有查询执行通过我的应用程序。的SQL Server:最大记录数返回

更新

我要实现以有限的记录试用版咯!我不想混淆我的实际代码,并希望以某种方式限制任何查询结果中的记录数量。另一种方法是将参数传递给每个商店程序,但我真的不喜欢这个并寻找其他策略!

+2

现在你为什么会想要那样做? – 2011-06-08 11:18:25

+0

好吧,我想限制我的应用程序来获取在特定模式下记录的具体数量... – mqpasta 2011-06-08 11:22:55

+1

这听起来很危险的 - 第6个月下来,你正在做一些无关变化的应用程序,它突然要更新25行。但在其他地方,您已将应用程序限制设置为20,现在突然显示5行不会更新,但不会显示错误消息。 6个月进一步向下行,你就开始研究为什么一些更新似乎并不正确的工作... – 2011-06-08 11:59:31

回答

2

你没有提到你正在使用的应用程序的语言,所以我不能给你的代码,但使一个数据库的包装功能连接。在此功能,您连接到数据库后,发出SET ROWCOUNT n,使n参数,并添加你需要使它变量的任何逻辑。我用CONTEXT_INFO做类似的事情,我把它设置在我的连接函数中。

记住,你需要使用这种包装功能处处连接到数据库的应用程序(使用搜索和替换),作为结果,你会永远拥有的行数集。

+0

这将是最不好的解决方案!但通过这种方式,我不得不更改很多代码,无论是通过查找还是替换!但它是冒险和昂贵的...... – mqpasta 2011-06-09 09:16:27

0

在应用启动时,通过执行以下命令重置RowCount

command.CommandText = "SET ROWCOUNT " + rowCount + ";"; 

command.CommandText = "SET ROWCOUNT 0;"; 

当特定模式被激活时,通过执行以下命令设置RowCount到所需要的值

当特定模式被停用,再次复位RowCount


参考SET ROWCOUNT (Transact-SQL)

+0

我发现它没有工作...它只是为特定的命令设置,但不是为所有即将到来的查询... – mqpasta 2011-06-09 07:15:23

5

你可以在你的代码进行参数化TOP所有命令

DECLARE @rows int 
SET @row = ISNULL(@row, 2000000000) 
SELECT TOP (@rows) ... FROM .. 

您可以为您所有的疑问这种方式,比方说通过包装或延长的SqlCommand

SET ROWCOUNT全局定义TOP不是一个安全的选项:它影响中间结果集并具有其他不可预知的行为。而且这部分不赞成以忽略在I/U/d DML:在SQL Server的下一个版本see MSDN

使用SET ROWCOUNT将不会影响DELETE,INSERT和UPDATE语句

+0

我理解使用ROWCOUNT的结果,但事实上,我只是影响select语句......无论如何!使用顶级的意思是我需要改变我所有我不想做的查询!我正在寻找一个数据库级别的参数来实现这一点! – mqpasta 2011-06-09 07:16:36

+0

@mqpasta:你说过“我们有RowCount来设置要返回或影响的记录数”。我认为“影响”意味着删除,插入,更新等。没有数据库级别的设置:这将是有史以来最愚蠢的事情之一。您可以使用SET ROWCOUNT对每个连接进行设置,但是这有* *问题*,并且无法正确实现 – gbn 2011-06-09 07:19:13