2016-01-27 31 views
-1

我想在SQL中創建一個簡單函數,該函數將表名稱作爲輸入 並返回該表的記錄數。用於返回給定表中的數字或記錄的SQL函數

如何創建這種'動態'功能?

+0

@DStanley問題是針對SQL Server的 – Lamak

+0

由於SQL Server函數不能使用動態SQL,因此無法在SQL Server中創建函數來執行此操作(至少不是凡人)。你可以用存儲過程來做到這一點,但這不是你的問題。 –

+0

如果你實際上並不需要確切的數字,你可以使用:'SELECT SUM(rows)FROM sys.partitions WHERE [object_id] = OBJECT_ID('dbo.YourTable')AND index_id IN(0,1);'。它非常快速,不需要動態SQL – Lamak

回答

1

啊,但你不必使用動態sql這樣的東西。你可以改用表格分區。

這應該適合你。有一點需要注意的是,這可能並非總是100%準確,但我從來沒有看到過它是不正確的。根據文檔,它是「分區中的大概行數」。

create function GetTableRowCount 
(
    @TableName sysname 
) returns table as return 
    SELECT SUM(row_count) AS MyRowCount 
    FROM sys.dm_db_partition_stats 
    WHERE object_id = OBJECT_ID(@TableName) 
    GROUP BY OBJECT_NAME(object_id); 

這甚至是一個內聯表值函數,而不是更常用的標量函數。