Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用SET ROWCOUNT安全吗?_Sql Server_Sql Server 2008_Rowcount - Fatal编程技术网

Sql server 使用SET ROWCOUNT安全吗?

Sql server 使用SET ROWCOUNT安全吗?,sql-server,sql-server-2008,rowcount,Sql Server,Sql Server 2008,Rowcount,我使用SET ROWCOUNT是因为该值来自过程中的一个参数 SET ROWCOUNT @take SELECT * FROM Something SET ROWCOUNT 0 是否可以同时执行另一个过程并获取行计数设置,或者在存储过程中使用它是否完全安全?行计数特定于您当前的作用域,因此您在那里是安全的。然而,在线图书告诉我,这可能会或可能不会影响您的需求: 使用SET ROWCOUNT不会影响 删除、插入和更新语句 在SQL Server的下一个版本中。做 不将SET ROWCOUN

我使用SET ROWCOUNT是因为该值来自过程中的一个参数

SET ROWCOUNT @take 

SELECT * FROM Something

SET ROWCOUNT 0

是否可以同时执行另一个过程并获取行计数设置,或者在存储过程中使用它是否完全安全?

行计数特定于您当前的作用域,因此您在那里是安全的。然而,在线图书告诉我,这可能会或可能不会影响您的需求:

使用SET ROWCOUNT不会影响 删除、插入和更新语句 在SQL Server的下一个版本中。做 不将SET ROWCOUNT与DELETE一起使用, 以新格式插入和更新语句 开发工作,并计划修改 当前使用它的应用程序。 此外,对于删除、插入和更新 当前使用SET的语句 ROWCOUNT,我们建议您 重写它们以使用顶级语法。 有关详细信息,请参见删除 Transact-SQL,插入Transact-SQL, 或更新Transact-SQL


TOP也可以使用变量,现在可以在INSERT、UPDATE和DELETE语句中使用。嘿,我今天学到了一些新东西。在联机丛书中查找如何使用TOP with变量

我添加这个答案是为了那些仍然在搜索这个答案的人

使用SET ROWCOUNT不再安全,因为它将在SQL Server的下一个版本中被弃用:


我这样使用它只是为了选择,所以它不会被弃用 作为一个监视器线程,我需要从这个表中选择所有挂起的行,但是, 作为进程线程,我一次只想处理10行 但我不想在存储过程中使用意大利面代码,因此我的解决方案如下:

参数@top int=0

IF @TOP > 0
    SET ROWCOUNT @TOP -- only put a cap on the select if we pass in the @top value
-选择“正常” 从aTable中选择* -获取所有行或获取虚拟top@top -示例:exec up_myProc@top=10-获取前10名
-exec up_myProc@top=0-获取所有行

为Necro感到抱歉,刚刚在SQLServer 2016上偶然发现了这一点,并认为这可能很有趣:
如果使用的是从tabX选择到tabY,则如果已将ROWCOUNT设置为0,则此操作也会受到影响,即使此选择发生在正在调用的过程中。所以要小心。

您可以使用带有select top的变量。选择top@take*from something在SQL Server 2008中不推荐使用RowCount。如果您正在编写新代码,请不要使用rowcount,而是使用TOP。您能否提供一个链接,明确声明set rowcount已弃用?因为我没这么说,但我并没有完全反对。Fomr您的链接上写着“为INSERT、UPDATE和DELETE语句设置行数”,所以SELECTS应该仍然受支持。但在PDW中不能使用TOP。