DECLARE @sql NVARCHAr(255);
DECLARE @toStart INT;SET @sql = N'SELECt @toStart = COUNT(ID) FROM ' + QUOTENAME(@tempTableName);EXEC sp_executesql @sql, N'@toStart INT OUTPUT', @toStart OUTPUT;PRINT @toStart;
但是,如果您可以忽略当前的进行中的事务(并且您使用的是SQL Server 2005或更高版本,请在询问问题时指定版本),这是一种更轻松,更有效的方法。
DECLARE @toStart INT;SELECt @toStart = SUM(rows) FROM sys.partitions WHERe [object_id] = OBJECT_ID(@tempTableName) AND index_id IN (0,1);PRINT @toStart;
仅出于完整性考虑,以下是SQL Server2000的解决方案,该解决方案也不需要任何特殊特权(只需connect和public成员):
DECLARE @toStart INT;SELECt @toStart = [rows] FROM sysindexes WHERe id = OBJECT_ID(@tempTableName) AND indid IN (0,1);PRINT @toStart;
就是说,如果您使用计数来确定下一个ID可能是什么,或者类似的事情,我认为您正在以错误的方式进行处理,因为可以删除行,并且如果是标识列,则可以跳过值由于回滚。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)