






















一直不学无术,所以也就一直懵懵懂懂。
之前有朋友问起以下代码怎么不行:
declare @rowcount int;
set @rowcount = 10;
select top @rowcount * from table
这个是因为,TOP 只接受常量做数量参数,而不能接受变量,给对方提供的解决方案是:
declare @sql nvarchar(4000);
set @sql = 'select top ' + convert(varchar(10), @rowcount) + ' * from table'
exec(@sql)
刚在博问里,人问起 rowcount 的用法,查了下,文档里是这样说的:
使 SQL Server 在返回指定的行数之后停止处理查询。
Transact-SQL 语法约定
语法
SET ROWCOUNT { number | @number_var }
参数在停止特定查询之前要处理的行数(整数)。
权限要求具有 public 角色的成员身份。
示例SET ROWCOUNT 在达到指定的行数后停止处理。请注意,在下面的示例中共有 545 行满足 Quantity 小于 300 的条件。但是,从更新后返回的行数可以看出并非所有行都得到了处理。ROWCOUNT 影响所有的 Transact-SQL 语句。
复制代码 USE AdventureWorks2008R2; GO SELECT count(*) AS Count FROM Production.ProductInventory WHERE Quantity < 300; GO
下面是结果集:
Count
-----------
537
(1 row(s) affected)
现在,将 ROWCOUNT 设置为 4,并以 Quantity 小于 300 的条件更新所有行。
复制代码 SET ROWCOUNT 4; UPDATE Production.ProductInventory SET Quantity = 400 WHERE Quantity < 300; GO
(4 row(s) affected)
于是醍醐灌顶,对朋友的问题得出新的解决方案:
declare @rowcount int;
set @rowcount = 1;
set rowcount @rowcount
SELECT * FROM table
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。