【问题标题】:How to get Row count by dynamically passing the table name如何通过动态传递表名来获取行数
【发布时间】:2012-09-05 13:49:54
【问题描述】:
create procedure qa_cc
@tablename varchar(500)

AS 

BEGIN
    -- Create two integer values
DECLARE @tableOneCount varchar(50), @tableTwoCount varchar(50)

-- Get the number of rows from the first table
SELECT @tableOneCount = 'SELECT COUNT(*) FROM'  + @tablename; 
    exec (@tableOneCount);           

select      @tableOneCount  ; 

END

exec qa_cc @tablename=table1

【问题讨论】:

  • 那里有问题吗?
  • 显而易见的问题是如何让它工作。在示例查询中,@tableOneCountexec 期间超出范围。对新用户友好一点也无妨!

标签: sql sql-server tsql count row


【解决方案1】:

你可以使用sp_executesql,比如:

declare @sql nvarchar(max);
set @sql = N'select @cnt = count(*) from ' + @tablename;
declare @cnt int;
exec sp_executesql @sql, N'@cnt int output', @cnt = @cnt output;
select @cnt;

【讨论】:

    【解决方案2】:
    SELECT SUM(pa.rows) RowCnt
     FROM sys.tables ta
     INNER JOIN sys.partitions pa
     ON pa.OBJECT_ID = ta.OBJECT_ID
     WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0)
     and ta.name=@tablename
     GROUP BY ta.name
    

    http://blog.sqlauthority.com/2010/09/08/sql-server-find-row-count-in-table-find-largest-table-in-database-part-2/

    【讨论】:

    • @Andomar 我讨厌动态 SQL :)
    • 很多事情只能使用动态 SQL 来完成。例如,通过订单表进行有效搜索。如果没有动态 SQL,您总是会得到针对一种特定类型的搜索进行优化的查询计划。 (动态 SQL 可以是服务器端或客户端。(
    【解决方案3】:

    看起来您在 FROM 关键字后面缺少一个空格,该空格读取的是 FROMTABLE 而不是 FROM Table

    DECLARE @TABLE NVARCHAR(100)
    SET @TABLE = 'CLIENT' -- YOUR TABLE NAME
    
    EXEC('SELECT COUNT(*) FROM ' + @TABLE)
    

    【讨论】:

    • exec 需要字符串文字或参数作为参数。你不能就地连接。
    • @Andomar 我在发布答案之前测试了查询它工作正常 SQL Server 2008 R2
    • 很好,那一定是 2008 年的改进。你每天都在这里学到新东西! +1
    【解决方案4】:
    CREATE PROCEDURE [dbo].[TableRowCount]
    @tableName text
    AS
    EXEC ('SELECT COUNT(*) FROM ' + @tableName)
    RETURN @@ROWCOUNT
    

    我希望这会有所帮助。谢谢。

    【讨论】:

    • @@ROWCOUNT 在这种情况下为 1(作为返回的一行)
    猜你喜欢
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 2013-11-28
    • 2019-05-25
    • 2018-08-22
    • 2021-12-12
    相关资源
    最近更新 更多