我们RowCount
设置的记录数返回或影响。但是我们需要在执行sql语句之前每次都设置它。我正在寻找一种方式来设置这个,一旦我的应用程序启动,所以它影响所有查询执行通过我的应用程序。的SQL Server:最大记录数返回
更新
我要实现以有限的记录试用版咯!我不想混淆我的实际代码,并希望以某种方式限制任何查询结果中的记录数量。另一种方法是将参数传递给每个商店程序,但我真的不喜欢这个并寻找其他策略!
我们RowCount
设置的记录数返回或影响。但是我们需要在执行sql语句之前每次都设置它。我正在寻找一种方式来设置这个,一旦我的应用程序启动,所以它影响所有查询执行通过我的应用程序。的SQL Server:最大记录数返回
更新
我要实现以有限的记录试用版咯!我不想混淆我的实际代码,并希望以某种方式限制任何查询结果中的记录数量。另一种方法是将参数传递给每个商店程序,但我真的不喜欢这个并寻找其他策略!
你没有提到你正在使用的应用程序的语言,所以我不能给你的代码,但使一个数据库的包装功能连接。在此功能,您连接到数据库后,发出SET ROWCOUNT n
,使n
参数,并添加你需要使它变量的任何逻辑。我用CONTEXT_INFO做类似的事情,我把它设置在我的连接函数中。
记住,你需要使用这种包装功能处处连接到数据库的应用程序(使用搜索和替换),作为结果,你会永远拥有的行数集。
这将是最不好的解决方案!但通过这种方式,我不得不更改很多代码,无论是通过查找还是替换!但它是冒险和昂贵的...... – mqpasta 2011-06-09 09:16:27
在应用启动时,通过执行以下命令重置RowCount
:
command.CommandText = "SET ROWCOUNT " + rowCount + ";";
:
command.CommandText = "SET ROWCOUNT 0;";
当特定模式被激活时,通过执行以下命令设置RowCount
到所需要的值
当特定模式被停用,再次复位RowCount
。
我发现它没有工作...它只是为特定的命令设置,但不是为所有即将到来的查询... – mqpasta 2011-06-09 07:15:23
你可以在你的代码进行参数化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语句
现在你为什么会想要那样做? – 2011-06-08 11:18:25
好吧,我想限制我的应用程序来获取在特定模式下记录的具体数量... – mqpasta 2011-06-08 11:22:55
这听起来很危险的 - 第6个月下来,你正在做一些无关变化的应用程序,它突然要更新25行。但在其他地方,您已将应用程序限制设置为20,现在突然显示5行不会更新,但不会显示错误消息。 6个月进一步向下行,你就开始研究为什么一些更新似乎并不正确的工作... – 2011-06-08 11:59:31